Zaman uyumsuz g/ç Disk Windows NT, Windows 2000 ve Windows XP üzerinde eşzamanlı olarak görünür

Makale çevirileri Makale çevirileri
Makale numarası: 156932 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Microsoft Windows NT, Windows 2000 ve Windows XP'de dosya g/ç zaman uyumlu veya zaman uyumsuz olabilir. Eşzamanlı g/ç için varsayılan davranış: bir g/ç işlev olarak adlandırılır ve g/ç işlemi tamamlandığında verir. Zaman uyumsuz g/ç, diğer taraftan, yürütme hemen çağrıyı yapana geri dönmek bir g/ç işlevi sağlar, ancak g/ç gelecekteki bir süreye kadar tam olarak kabul edilir değil. G/ç işlemi tamamlandığında işletim sistemi arayan bildirir. Alternatif olarak, arayanın durumu bekleyen g/ç işlemi, işletim sistemi hizmetlerini kullanarak belirleyebilirsiniz.

Zaman uyumsuz g/ç avantajı arayan diğer yapmak için zaman sahip olmasıdır. İş veya g/ç işlemi tamamlanırken daha fazla istekleri yayınlar. , Terim çakışan g/ç için zaman uyumsuz g/ç ve olmayan örtüşen sık kullanılır G/ç eşzamanlı g/ç için. Bu makalenin zaman uyumsuz şartlarını kullanır ve Windows NT altında g/ç işlemleri için zaman uyumlu. Bu makale varsayar Okuyucu CreateFile gibi dosya g/ç işlevleri ile belirli bir benzerlik vardır, ReadFile, WriteFile.

Sık sık, zaman uyumsuz g/ç işlemleri yalnızca eşzamanlı g/ç. belirli davranır Bu makalede sonraki bölümlerde açıklanan koşullar g/ç olun zaman uyumlu olarak işlemleri tamamlamak. Arka plan için hiçbir zaman arayan vardır g/ç işlemi tamamlanana kadar g/ç işlevleri değil çünkü geri çalışır.

Zaman uyumlu ve zaman uyumsuz g/ç ile ilgili çeşitli işlevler. Bu makalede örnek olarak ReadFile ve WriteFile kullanır; iyi alternatifler, ReadFileEx ve WriteFileEx olacaktır. Bu makale yalnızca disk g/ç özel olarak ele almasına rağmen birçok ilkeleri gibi seri bir g/ç veya ağ g/ç g/ç diğer türleri için uygulanabilir.

Not: çünkü Windows 95 (g/ç aygıtları, başka türlere yapmasa da) disk aygıtları üzerinde zaman uyumsuz g/ç desteklemez, bu makalede davranışını kapsamında değildir.

Daha fazla bilgi

Zaman uyumsuz g/ç Ayarla

Dosya açıldığında CreateFile FILE_FLAG_OVERLAPPED bayrağı belirtilmiş olmalıdır. Bu bayrak, zaman uyumsuz olarak gerçekleştirilecek dosya g/ç işlemlerini sağlar. İşte bir örnek:
   HANDLE hFile;

   hFile = CreateFile(szFileName,
                      GENERIC_READ,
                      0,
                      NULL,
                      OPEN_EXISTING,
                      FILE_FLAG_NORMAL | FILE_FLAG_OVERLAPPED,
                      NULL);

   if (hFile == INVALID_HANDLE_VALUE)
      ErrorOpeningFile();
				
Sistem ayırdığından, zaman uyumsuz g/ç için kodlama yaparken dikkatli olun Bu gerekiyorsa, bir işlem zaman uyumlu yapma hakkı. Bu nedenle, zaman uyumlu veya zaman uyumsuz olarak tamamlanmış bir g/ç işlemi doğru şekilde işlemek için program yazarsanız en iyisidir. Örnek kod, bu faktör göstermektedir.

Bir program için pek çok şey için bekleyen zaman uyumsuz sırada vardır queuing ek işlemleri veya işlem gibi tamamlamak için işlemleri arka plan iş. Örneğin, aşağıdaki kod düzgün işleme bir okuma işlemi örtüşen ve gelmeyecek tamamlanması. Bunu yapar hiçbir şey daha fazla bekleyin tamamlamak bekleyen g/ç için:
   if (!ReadFile(hFile,
                 pDataBuf,
                 dwSizeOfBuffer,
                 &NumberOfBytesRead,
                 &osReadOperation )
   {
      if (GetLastError() != ERROR_IO_PENDING)
      {
         // Some other error occurred while reading the file.
         ErrorReadingFile();
         ExitProcess(0);
      }
      else
         // Operation has been queued and
         // will complete in the future.
         fOverlapped = TRUE;
   }
   else
      // Operation has completed immediately.
      fOverlapped = FALSE;

   if (fOverlapped)
   {
      // Wait for the operation to complete before continuing.
      // You could do some background work if you wanted to.
      if (GetOverlappedResult( hFile,
                               &osReadOperation,
                               &NumberOfBytesTransferred,
                               TRUE))
         ReadHasCompleted(NumberOfBytesTransferred);
      else
         // Operation has completed, but it failed.
         ErrorReadingFile();
   }
   else
      ReadHasCompleted(NumberOfBytesRead);
				
Unutmayın & ReadFile geçirilen NumberOfBytesRead farklıdır & GetOverlappedResult NumberOfBytesTransferred geçti. Eğer bir işlem GetOverlappedResult belirlemek için kullanılır, eş zamanlı yapıldı gerçek olduğunda bu işleme aktarılan bayt sayısı tamamlandı. & ReadFile geçirilen NumberOfBytesRead anlamsız.

Diğer taraftan, bir işlem hemen sonra tamamlanırsa, & ReadFile geçirilen NumberOfBytesRead okunan bayt sayısı için geçerlidir. Bu durumda, ReadFile geçirilen ÇAKIŞAN yapı atlayın; GetOverlappedResult veya WaitForSingleObject ile kullanmayın.

Zaman uyumsuz işlem ile bir başka uyarı bekliyor, işlem tamamlanıncaya kadar bir ÇAKIŞAN yapı kullanmamalısınız olur. Diğer sözcükler, üç bekleyen g/ç işlemleri varsa, üç ÇAKIŞAN yapıları kullanmanız gerekir. Bir ÇAKIŞAN yapı yeniden, g/ç işlemlerinde öngörülemeyen sonuçlar alırsınız ve veri bozulmalarla karşılaşabilirsiniz. Yeni işlem sol üzerinden veri etkiler için ayrıca bir ÇAKIŞAN yapı ilk kez kullanmadan önce veya bir önceki işlemi tamamlandıktan sonra yeniden önce doğru başlatmanız gerekir.

Kullanılan veri arabelleği kısıtlaması aynı tür uygulandığı bir işlem. Veri arabelleği gerekir okumak veya kadar yazılmış, karşılık gelen g/ç işlemi tamamlandı; Okuma veya yazma arabelleği hatalarını ve bozuk veriler neden olabilir.

Zaman uyumsuz g/ç hala zaman uyumlu olarak görünüyor

Bu makalenin yönergeleri izlediyseniz, ancak tüm g/ç işlemlerini hala genellikle eşzamanlı olarak verilen, sırayla tamamlayın ve ReadFile işlemlerden hiçbiri ERROR_IO_PENDING döndüren FALSE ile GetLastError() işlevinin yeterli verir, bu herhangi bir arka plan iş için hiçbir zaman gerektiği anlamına gelir. Bu neden oluşuyor?

Çeşitli nedenlerle neden g/ç işlemleri eşzamanlı olarak tamamlamak vardır zaman uyumsuz işlem için kodlanmış bile:

Sıkıştırma

NTFS sıkıştırması zaman uyumsuz işlem için bir engel olur. Dosya Sistem sürücüsü sıkıştırılmış dosyaları zaman uyumsuz olarak erişecek değil; Bunun yerine tüm işlemleri yalnızca eşzamanlı yapılmaz. Bu dosyalar için geçerli değildir SIKIŞTIRMA veya PKZIP benzer yardımcı programları ile sıkıştırılmış.

NTFS şifreleme

Benzer şekilde sıkıştırma, dosya şifreleme sistemi sürücüsü, zaman uyumsuz g/ç için zaman uyumlu dönüştürme neden olur. Dosyaların şifresi, zaman uyumsuz g/ç istekleri de olacaktır.

Bir dosya genişletme

G/ç işlemleri eşzamanlı olarak tamamlandı başka işlemler nedenidir. Windows NT, herhangi bir işlem uzunluğunu aşan bir dosyaya zaman uyumlu yazın.

Not: uygulamalar yapabilirsiniz yukarıda belirtilen yazma işlemi zaman uyumsuz SetFileValidData işlevini kullanarak ve sonra bir WriteFile verme dosyanın geçerli veri uzunluğunu değiştirerek.

(Bu, Windows XP ve sonraki sürümlerinde kullanılabilir olan) SetFileValidData kullanarak, uygulamaları verimli dosyaları bunları sıfır doldurma için bir başarım cezası olmaz işletilmeden genişletebilirsiniz.

NTFS dosya sistemi yoktur sıfır-dolgusu SetFileValidData tarafından tanımlanan geçerli veri uzunluğu (VDL) kadar veri bu işlevi olan güvenlik uygulamalarını dosya diğer dosyalar tarafından daha önce kullanılmakta kümeler nerede atanmış olabilir. Bu nedenle, SetFileValidData çağıran yeni SeManageVolumePrivilege etkinleştirilmiş olmasını gerektirir (varsayılan olarak, bu yalnızca Yöneticiler'e atanmıştır). Microsoft ISV bu işlevi kullanarak etkileri dikkatle ele almanızı önerir.

Önbellek

Birçok g/ç (disk, iletişim ve diğerleri) sürücüleri burada, g/ç isteği "hemen" tamamlanabilir, işlem tamamlanır ve ReadFile veya WriteFile işlevi TRUE döndürür özel durum koduna sahip. Zaman uyumlu olması için bu tür işlemler tüm şekillerde görünür. Bir disk için Aygıt, "hemen" ne zaman verileri bellekte önbelleğe alınan g/ç isteği genelde tamamlanabilir.

Veri önbellekte değilse

Veri değilse önbellek düzeni, karşı ancak çalışabilirsiniz Önbellek. Windows NT önbelleği, dahili olarak dosyası eşleştirmeleri kullanılarak uygulanır. Windows NT'de Bellek Yöneticisi zaman uyumsuz bir sayfa sağlamaz Önbellek Yöneticisi tarafından kullanılan dosya eşlemelerini yönetmek için arıza mekanizması. , Önbellek Yöneticisi ancak doğrulayabilirsiniz istenen sayfa bellekte olup olmadığını böylece önbelleğe alınmış bir zaman uyumsuz okuma sorunu, ve sayfaları bellekte değilse, dosya sistemi sürücüsü engellenen iş parçacığı, istemiyorsanız ve istek sınırlı bir çalışan iş parçacığı havuzu tarafından işleneceğini varsayar. Denetim ReadFile aramanız hala bekliyor okuma sonra programa döndürülür.

Bu küçük bir sayı isteklerinin düzgün çalışır ancak, işçi iş parçacığı havuzu (şu anda üç 16 MB sistem üzerinde), orada sınırlı hala sadece birkaç istekleri için disk sürücüsü belirli bir zamanda sıraya alınır. G/ç işlemleri için önbellekte bulunmayan verileri pek çok sorun, bellek yöneticisi ve önbellek Yöneticisi doygun ve isteklerinizi eşzamanlı yapılmaz.

Önbellek Yöneticisi davranışını göre de etkilenebilir bir dosyaya sıralı veya rasgele erişim. Önbelleğin yararları görülür dosyaları sırayla erişirken çoğu. FILE_FLAG_SEQUENTIAL_SCAN bayrağı CreateFile'de bu tür erişim için önbelleğe çağrı iyileştirir. Ancak, rasgele bir şekilde dosyalara kullanın Önbellek Yöneticisi komutunuza CreateFile FILE_FLAG_RANDOM_ACCESS bayrağı davranışı rasgele erişim için en iyi duruma getirme.

Önbellek kullanmayın.

FILE_FLAG_NO_BUFFERING bayrağı en davranışını etkisi zaman uyumsuz işlem için dosya sistemi. Bu güvence altına almak için en iyi yoldur g/ç istekleri gerçekten zaman uyumsuz olduğunu. Dosya sistemine bildirir kullanımı için herhangi bir mekanizma hiç önbelleğe alır.

Uyarı: veri arabellek hizalama ve aygıtın kesim boyutu ile yapmak zorunda Bu bayrak kullanmanın bazı kısıtlamaları vardır. İşlev başvurusu'nda CreateFile işlevi bu bayrak düzgün kullanma hakkında daha fazla bilgi için belgelerine bakın.

Gerçek Dünya Test sonuçları

Bazı test sonuçlarını örnek kod aşağıda verilmiştir. Büyüklüğünü sayı burada önemli değildir ve bilgisayardan bilgisayara değişir, ancak sayıları arasındaki ilişkiyi birbirine illuminates karşılaştırılması Genel bayraklar performans üzerindeki etkisini.

Aşağıdakine benzer sonuçlar görmeyi bekleyebilirsiniz:
  • Test 1
    Asynchronous, unbuffered I/O:  asynchio /f*.dat /n
    
       Operations completed out of the order in which they were requested.
       500 requests queued in 0.224264 seconds.
       500 requests completed in 4.982481 seconds.
    						
    Bu sınama, yukarıda belirtilen program 500 g/ç istekleri hızlı bir şekilde verilmiş ve çok daha fazla istekleri yayınlar veya başka bir işlem için zaman vardı gösterir.
  • Test 2
    Synchronous, unbuffered I/O: asynchio /f*.dat /s /n
    
       Operations completed in the order issued.
       500 requests queued and completed in 4.495806 seconds.
    						
    Bu program 4.495880 saniye harcanan bu test gösterir Oysa, işlemleri tamamlamak için ReadFile çağırma test 1 aynı istekleri yayınlar için yalnızca 0.224264 saniye harcanan. 2 Sınamak, programın herhangi bir arka plan yapmak "ek" hiçbir zaman vardı. İş.
  • Test 3
    Asynchronous, buffered I/O: asynchio /f*.dat
    
       Operations completed in the order issued.
       500 requests issued and completed in 0.251670 seconds.
    						
    Bu test zaman uyumlu önbellek yapısını gösterir. Tüm okuma verilen ve 0.251670 saniyede tamamlandı. Diğer bir deyişle, zaman uyumsuz istekler eşzamanlı olarak tamamlandı. Bu test de veri olduğunda Önbellek Yöneticisi'nin yüksek performans gösterir. önbelleği.
  • Test 4
    Synchronous, buffered I/O: asynchio /f*.dat /s
    
       Operations completed in the order issued.
       500 requests and completed in 0.217011 seconds.
    						
    Bu test, test 3 olduğu gibi aynı sonuçları gösterir. Önbellekten eşzamanlı okuma zaman uyumsuz okuma biraz daha önbellekten tamamlamak unutmayın. Veri önbellekte olduğunda bu sınama ayrıca önbellek Yöneticisi'nin yüksek performans gösterir.

SONUÇ

Tüm bu türü, boyutu ve programınız gerçekleştirdiği işlem sayısı bağlıdır hangi en iyi yöntemdir, çünkü karar verebilirsiniz.

CreateFile için özel Bayrakları belirtmeden varsayılan dosya erişimi zaman uyumlu ve önbelleğe alınmış bir işlem değil.

Not: dosya sistemi sürücüsü öngörü zaman uyumsuz okuma ve zaman uyumsuz Geç Yazma değiştirilen veri olmadığından bu modda bazı otomatik zaman uyumsuz davranış alın. Bu uygulama [ASCII 146] s g/ç zaman uyumsuz yapmaz, ancak büyük çoğunluğu basit uygulamalar için ideal durumdur.

Diğer taraftan, uygulamanızın basit değil, yapmak olabilir Bazı profil oluşturma ve en iyi yöntemi belirlemek için performans izleme, Bu makalenin önceki bölümlerinde gösterilen testler benzer. Profil oluşturma zaman harcanan ReadFile veya WriteFile işlevini ve sonra bu sefer nasıl uzun karşılaştırma sürer gerçek g/ç işlemleri tamamlamak son derece yararlıdır. Çoğu g/ç işlemi sonra saati g/ç, gerçekten veren içinde harcandığını zaman uyumlu olarak tamamlandı. Ancak, sertifika veren g/ç istekleri için harcanan zaman ise görece küçük zaman onu alır g/ç işlemleri için karşılaştırma tam, sonra işlemlerinizi zaman uyumsuz olarak kabul edilir. Örnek Bu makalenin önceki bölümlerinde belirtilen kodu kendi yapmak için QueryPerformanceCounter işlevi kullanır. İç profil oluşturma.

Performans izleme programınızı nasıl etkili olduğunu belirlemenize yardımcı disk önbelleği ile. Herhangi biri için performans sayaçlarını izleme Cache nesnesi önbellek yöneticisinin performans gösterecektir. Fiziksel Disk veya Mantıksal Disk performans sayaçlarını izleme disk sistemlerinin performans nesneleri gösterir.

Performans izleme yardımcı olan birkaç özelliği vardır; PerfMon ve DiskPerf özellikle yararlıdır. Sistem disk sistemleri performans verilerini toplamak önce diskperf -y komut kesmeniz gerekir. Komut vermek sonra veri toplama başlatmak için sistemi yeniden başlatmanız gerekir.

Referanslar

Bu yardımcı programları ve performans izleme hakkında daha fazla bilgi için bkz: "en iyi duruma getirme" Windows NT, Windows NT kaynak birim Seti Belgeleri.
SQL Server, Microsoft SQL Server Always-On depolama çözümü gözden geçirme programı altında özetlenen 'garantili teslim için kararlı bir ortam' sistemleri gerektirir. FOSQL Server veritabanı altyapısı için giriş ve çıkış gereksinimleri hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
967576Microsoft SQL Server veritabanı altyapısı giriş/çıkış gereksinimleri

Özellikler

Makale numarası: 156932 - Last Review: 30 Mayıs 2013 Perşembe - Gözden geçirme: 6.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Win32 Uygulama Programlama Arabirimi
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Express
  • Microsoft SQL Server 2008 Standard
Anahtar Kelimeler: 
kbapi kbfileio kbinfo kbkernbase kbmt KB156932 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, Microsoft Makine Çevirisi Düzenleme yazılımı tarafından tercüme edilmiş olup, yüksek olasılıkla profesyonel bir çevirmen yerine CTF teknolojisi kullanılarak, Microsoft Topluluğu tarafından düzenlenmiştir. Microsoft, Bilgi Bankamız içindeki tüm makaleleri kendi dilinizde okuyabilmeniz için size hem profesyonel çevirmenler tarafından tercüme edilen hem de makine tarafından tercüme edildikten sonra Topluluk tarafından kontrol edilen makaleler sunar. Bununla birlikte, makine tarafından tercüme edilen, hatta Topluluk tarafından kontrol edilen bir makale bile her zaman mükemmel dil kalitesinde olmayabilir. Makalede dilinizi konuşan yabancı birisinin yapabileceği türden sözcük, söz dizimi veya dilbilgisi hataları bulunabilir. Microsoft, içeriğin hatalı tercümesinin veya müşterilerimiz tarafından kullanımının doğurabileceği olası yanlış anlamalar, hatalar veya zararlardan sorumlu değildir. Öte yandan Microsoft, Makine Çevirisi Düzenleme işlemini geliştirmek amacıyla Makine Çevirisi Düzenleme yazılımını ve araçlarını sık sık güncelleştirmektedir.
Makalenin İngilizcesi aşağıdaki gibidir: 156932

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com