Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir olayın gerçekleşmesini beklerken uzun süreli uyku durumunda kalan iş parçaları oluşturan birçok uygulama vardır. Diğer iş parçacıkları, yalnızca dönemsel olarak uyandırılarak bir değişikliği kontrol etmek veya durum bilgilerini güncellemek için uyku durumuna girebilir. İş parçacığı havuzu, uygulamanıza sistem tarafından yönetilen bir çalışan iş parçacığı havuzu sağlayarak iş parçacıklarını daha verimli kullanmanızı sağlar. En az bir iş parçacığı, iş parçacığı havuzunda sıraya alınan tüm bekleme işlemlerinin durumunu izler. Bekleme işlemi tamamlandığında, iş parçacığı havuzundan bir çalışan iş parçacığı karşılık gelen geri çağırma işlevini yürütür.
Bu konu, özgün iş parçacığı havuzu API'sini açıklamaktadır. Windows Vista'da kullanıma sunulan iş parçacığı havuzu API'si daha basit, daha güvenilirdir, daha iyi performansa sahiptir ve geliştiriciler için daha fazla esneklik sağlar. Mevcut thread havuzu API'si hakkında bilgi için bkz. Thread Havuzları.
Ayrıca, iş parçacığı havuzuna yönelik bekleme işlemiyle ilgili olmayan iş öğelerini de kuyruğa alabilirsiniz. bir iş öğesinin iş parçacığı havuzundaki bir iş parçacığı tarafından işlenmesini istemek için QueueUserWorkItem işlevini çağırın. Bu işlev, iş parçacığı havuzundan seçilen iş parçacığının çağıracağı işleve bir parametre verir. Bir iş öğesi kuyruğa alındıktan sonra iptal etmenin bir yolu yoktur.
Zamanlayıcı kuyruğu zamanlayıcıları ve kayıtlı bekleme işlemlerini iş parçacığı havuzunu da kullanır. Geri çağırma işlevleri iş parçacığı havuzuna sıralanır. Zaman uyumsuz G/Ç işlemlerini göndermek için BindIoCompletionCallback işlevini de kullanabilirsiniz. G/Ç tamamlandığında, geri çağırma iş parçacığı havuzundaki bir iş parçacığı tarafından yürütülür.
İş parçacığı havuzu, QueueUserWorkItem veya BindIoCompletionCallbackilk kez çağırdığınızda, ya da bir zamanlayıcı kuyruğa alındığında veya kayıtlı bekleme işlemi bir geri çağırma işlevini kuyruğa aldığında oluşturulur. Varsayılan olarak, iş parçacığı havuzunda oluşturulabilecek iş parçacığı sayısı yaklaşık 500'dür. Her iş parçacığı varsayılan yığın boyutunu kullanır ve varsayılan önceliğe göre çalışır.
İş parçacığı havuzunda iki tür iş parçacığı vardır: G/Ç ve G/Ç olmayan. G/Ç iş parçacığı, uyarılabilir bekleme durumunda olan bir iş parçacığıdır. İş öğeleri, G/Ç çalışan iş parçacıklarına zaman uyumsuz yordam çağrıları (APC) olarak kuyruğa alınır. Bir iş öğesini, uyarılabilen bir durumda bekleyen bir iş parçacığında yürütülmesi gerekiyorsa G/Ç çalışan iş parçacığına kuyruğa almanız gerekir.
G/Ç olmayan çalışan iş parçacığı G/Ç tamamlama bağlantı noktalarını bekler. G/Ç dışı çalışan iş parçacıklarını kullanmak, G/Ç çalışan iş parçacıklarını kullanmaktan daha verimlidir. Bu nedenle, mümkün olduğunda G/Ç dışı çalışan iş parçacıklarını kullanmanız gerekir. Bekleyen zaman uyumsuz G/Ç istekleri varsa hem G/Ç hem de G/Ç dışı çalışan iş parçacıkları çıkış yapmaz. Her iki iş parçacığı türü de zaman uyumsuz G/Ç tamamlama isteklerini başlatan iş öğeleri tarafından kullanılabilir. Ancak, tamamlanması uzun zaman alabilirse G/Ç dışı çalışan iş parçacıklarında zaman uyumsuz G/Ç tamamlama isteklerini göndermekten kaçının.
İş parçacığı havuzundan yararlanmak için iş öğeleri ve onların çağırdığı tüm işlevler iş parçacığı havuzuna uygun olmalıdır. Güvenli bir işlev, onu yürüten iş parçacığının ayrılmış veya kalıcı bir iş parçacığı olduğunu varsaymaz. Genel olarak, iş parçacığı yerel depolama kullanmaktan veya RegNotifyChangeKeyValue işlevi gibi kalıcı bir iş parçacığı gerektiren zaman uyumsuz bir çağrı yapmaktan kaçınmanız gerekir. Ancak, bu tür işlevler ayrılmış bir iş parçacığında çağrılabilir (uygulama tarafından oluşturulur) veya kalıcı bir çalışan iş parçacığına kuyruğa alınabilir (WT_EXECUTEINPERSISTENTTHREAD seçeneğiyle QueueUserWorkItem kullanılarak).
İlgili konular