2010-02-25 18 views

cevap

36

Muhtemelen Paralel Uzantılar ve düzenli iş parçacığı arasındaki en önemli fark kontrol akışıdır.

new Thread(...) veya ThreadPool.QueueUserWorkItem kullanılarak oluşturulan bir iş parçacığı, zaman içinde tamamen belirsiz bir noktada sona erecektir.

ThreadPool.QueueUserWorkItem(() => 
    { 
     Thread.Sleep(1000); 
     Console.WriteLine("Work Finished"); 
    }); 
Console.WriteLine("Item Queued"); 

metin Item Queued hemen görünür ve Work Finished yaklaşık 1 saniyelik gecikmenin ardından basılacaktır: Bu kod yazarsanız. Eğer paralel uzantıları kullanarak benzer bir şey yazarsanız Öte yandan

: şey, "Test" sonra bir takım gerçekleşmeden önce Bu durumda Görecekleriniz

Parallel.For(0, 10, i => 
    { 
     Thread.Sleep(1000); 
     Console.WriteLine("Test {0}", i); 
    }); 
Console.WriteLine("Finished"); 

1 saniyelik bir gecikme olduğunu rastgele bir sırada iletiler ve , sonraFinished metnini. Başka bir deyişle, paralel olarak çalışan görevler aslında program akışını değiştirmez. Programın genel verimliliğini artırmak için, farklı iş parçacıkları üzerinde farklı görevler yürütecek, böylece programın genel iş hacmini geliştirmek için, ancak bu programların gerçekten "arka planda" çalışmadığı "bir iş parçacığıyla olacağı gibi. Programınızın yapısını değiştirmek veya iş tamamlandığında bildirilmek üzere özel bir şey yapmak zorunda değilsiniz. Paralel tümcelerde'un içinde ne olduğuna dair herhangi bir kontrole sahip değilsiniz, ancak tüm paralel görevler tamamlanana kadar bloğun kontrole dönmeyeceğini biliyorsunuzdur. Paralel Uzantıları bu büyük olmasına rağmen

, gerçekte ihtiyaç böyle zamanlayıcı uygulamayı veya amacıyla bir iş parçacığı için delege olarak, arka planda bir görevi çalıştırmak için zaman hiçbir faydası vardır olursa olsun o PX söz ayılar UI duyarlı tutmak. Bunlar için iş parçacığı veya uyumsuzluk bileşenleri kullanmanız gerekir.

+0

da, iş parçacığının aksine tüm alt görevleri bekler. Hata iadesi, görevler ve daha sonra iş parçacıkları ile çok daha iyidir. –

4

Burada bir süre önce bu konuda izlenen iyi Channel9 bu. Çoğu işlem için paralel işlem uzantısını kullanmak daha kolaydır.

+0

Merhaba Adam, bu bağlantı benim için çalışmıyor, sayfa bulunamadı, bir görev için beklediğinizde diğer yararlı bağlantılar –

-2

Paralel İşleme oto yaratan dişler için sadece bazı fantezi arayüzü:

1

Paralel çerçeve, Windows threading modeline dayanan .NET threading modelini kullanır. Bununla birlikte, paralel kütüphaneyi daha verimli hale getirmek için genel çerçevede pek çok optimizasyon yapılmıştır.

This blog ek ayrıntılara sahiptir.