ThreadPools veya Görev IO bağlı işlemler için Kütüphane Paralel kullanmalıyım
Biraz toplayıcı benim projelerinden biri olarak, beslemeleri ve web podcast ben ayrıştırmak.
Eğer sıralı yaklaşım, kaynakların çok sayıda göz önüne alındığında, uzunca bir süre hepsi (ağ sorunları ve benzer şeyler yüzünden) işleme alır;
foreach(feed in feeds)
{
read_from_web(feed)
parse(feed)
}
Eşzamanlılık uygulamak ve eğer temelde ThreadPools ile çalışan iş parçacığı işlemi için kullanmanız gereken karar veremedi ya da sadece VUK sıralanmış olsun güvenmek istiyorum.
Kesin ThreadPools çalışan iş parçacığı ile bu işi benim için idare edecek ve senden beklediğim (ve çok çekirdekli İŞLEMCİ ortamlarda, diğer çekirdekler de kullanılacaktır) alacağım.
![]()
Ama yine de yöntemi tavsiye olarak VUK da dikkate almak istiyorum ama biraz endişeliyim. Öncelikle bu TRAFİK ThreadPools kullanır ama karar ek katman ekler biliyorum. Çoğunlukla tek çekirdekli bir ortam mevcut durumu hakkında endişeliyim. Eğer yanlış değilsem VUK başında sayıda işçi iş parçacığı sayısı eşit CPU çekirdeği ile başlar. Ben TRAFİK korkusu benzer sonuçlar elde benim için yaklaşım IO bağlı durumda sıralı.
IO-bağlı işlemleri (web üzerinden davamı kaynakları okuma) çok iyi ThreadPools kullanın ve olayları kontrol altında tutmak için, ya da sadece daha iyi TRAFİK güveniyor mu? VUK da IO bağlı senaryolarda kullanılabilir mi?
Güncelleme: Benim asıl endişem butek çekirdekli bir İŞLEMCİçevre VUK sadece sıralı yaklaşım gibi davranır ya da hala eşzamanlılık sunacak? Zaten Parallel Programming with Microsoft .NET book okuyorum ama bunun için kesin bir cevap bulamadım.
Not: Bu oldukça yanlış ifade edilmiş olan önceki soruma [ Is it possible to use thread-concurrency and parallelism together? ] yeniden bir cümle.
CEVAP
Ben onun yerine bu testleri yazmak ve pratik verileri görmek için karar verdi.
Efsane Test Edin
- Itr: Yineleme
- Seq: Ardışık Yaklaşım.
- PrlEx: Paralel Uzantıları Paralel.Dosyalarda grup
- VUK: Görev Paralel Kitaplığı
- TPool: Havuzu
Test Sonuçları
Tek Çekirdekli [Windows 7-32] CPU -- VMWare altında çalışır
Test Environment: 1 physical cpus, 1 cores, 1 logical cpus.
Will be parsing a total of 10 feeds.
________________________________________________________________________________
Itr. Seq. PrlEx TPL TPool
________________________________________________________________________________
#1 10.82s 04.05s 02.69s 02.60s
#2 07.48s 03.18s 03.17s 02.91s
#3 07.66s 03.21s 01.90s 01.68s
#4 07.43s 01.65s 01.70s 01.76s
#5 07.81s 02.20s 01.75s 01.71s
#6 07.67s 03.25s 01.97s 01.63s
#7 08.14s 01.77s 01.72s 02.66s
#8 08.04s 03.01s 02.03s 01.75s
#9 08.80s 01.71s 01.67s 01.75s
#10 10.19s 02.23s 01.62s 01.74s
________________________________________________________________________________
Avg. 08.40s 02.63s 02.02s 02.02s
________________________________________________________________________________
Tek Çekirdekli [Vista] CPU -- VMWare altında çalışır
Test Environment: 1 physical cpus, NotSupported cores, NotSupported logical cpus.
Will be parsing a total of 10 feeds.
________________________________________________________________________________
Itr. Seq. PrlEx TPL TPool
________________________________________________________________________________
#1 10.79s 04.05s 02.75s 02.13s
#2 07.53s 02.84s 02.08s 02.07s
#3 07.79s 03.74s 02.04s 02.07s
#4 08.28s 02.88s 02.73s 03.43s
#5 07.55s 02.59s 03.99s 03.19s
#6 07.50s 02.90s 02.83s 02.29s
#7 07.80s 04.32s 02.78s 02.67s
#8 07.65s 03.10s 02.07s 02.53s
#9 10.70s 02.61s 02.04s 02.10s
#10 08.98s 02.88s 02.09s 02.16s
________________________________________________________________________________
Avg. 08.46s 03.19s 02.54s 02.46s
________________________________________________________________________________
Çift Çekirdekli İŞLEMCİ [Windows 7-64]
Test Environment: 1 physical cpus, 2 cores, 2 logical cpus.
Will be parsing a total of 10 feeds.
________________________________________________________________________________
Itr. Seq. PrlEx TPL TPool
________________________________________________________________________________
#1 07.09s 02.28s 02.64s 01.79s
#2 06.04s 02.53s 01.96s 01.94s
#3 05.84s 02.18s 02.08s 02.34s
#4 06.00s 01.43s 01.69s 01.43s
#5 05.74s 01.61s 01.36s 01.49s
#6 05.92s 01.59s 01.73s 01.50s
#7 06.09s 01.44s 02.14s 02.37s
#8 06.37s 01.34s 01.46s 01.36s
#9 06.57s 01.30s 01.58s 01.67s
#10 06.06s 01.95s 02.88s 01.62s
________________________________________________________________________________
Avg. 06.17s 01.76s 01.95s 01.75s
________________________________________________________________________________
Quad-Core [Win 7-64] -- HyprerThreading CPU -- Destekledi
Test Environment: 1 physical cpus, 4 cores, 8 logical cpus.
Will be parsing a total of 10 feeds.
________________________________________________________________________________
Itr. Seq. PrlEx TPL TPool
________________________________________________________________________________
#1 10.56s 02.03s 01.71s 01.69s
#2 07.42s 01.63s 01.71s 01.69s
#3 11.66s 01.69s 01.73s 01.61s
#4 07.52s 01.77s 01.63s 01.65s
#5 07.69s 02.32s 01.67s 01.62s
#6 07.31s 01.64s 01.53s 02.17s
#7 07.44s 02.56s 02.35s 02.31s
#8 08.36s 01.93s 01.73s 01.66s
#9 07.92s 02.15s 01.72s 01.65s
#10 07.60s 02.14s 01.68s 01.68s
________________________________________________________________________________
Avg. 08.35s 01.99s 01.75s 01.77s
________________________________________________________________________________
Özetleme
- Tek çekirdekli bir ortam ya da çok çekirdekli bir Paralel Uzantıları üzerinde çalışacak olsa da, VUK ve Havuzuaynı şekilde davranır ve yaklaşık sonuçlar verir.
- HalaVUKvardıravantajlarıkolay gibiözel durum işleme, iptal destekleyin Görev sonuçlarını döndürmek için yeteneği. Ama Paralel Uzantıları da başka bir alternatif.
Kendi üzerinde test yapıyor
13 ** kaynak kodunu indirin ve kendi üzerinde çalıştırabilirsiniz. Eğer sonuçlar sonrası, onları da ekleyeceğim.
Güncelleme: kaynak linki Düzeltildi.

Bir boşluk döküm static_cast veya rein...
BackgroundWorker için görev paralel ki...
Benim iş katmanı için EJB3 veya Spring...
Raylar bir görev var:/runner veya komi...
Sözde elemanlar için tek veya çift kol...