Pertanyaan Threading vs Parallel Processing


Microsoft .NET 4.0 memperkenalkan "perangkat tambahan paralel" baru ke dalam kerangkanya. Saya bertanya-tanya apa perbedaan antara membuat aplikasi yang menggunakan System.Threading fungsi standar versus peningkatan paralel baru.


32
2018-02-25 04:33


asal


Jawaban:


Mungkin perbedaan paling penting antara Ekstensi Paralel dan threading biasa adalah aliran kontrol.

Sebuah utas, dibuat menggunakan new Thread(...) atau ThreadPool.QueueUserWorkItem akan berakhir pada titik waktu yang benar-benar tidak pasti. Jika Anda menulis kode ini:

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

Teks Item Queued akan segera muncul, dan Work Finished akan dicetak setelah sekitar 1 detik penundaan.

Di sisi lain, jika Anda menulis sesuatu yang serupa menggunakan ekstensi paralel:

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

Apa yang akan Anda lihat dalam kasus ini adalah penundaan 1 detik sebelum sesuatu terjadi, kemudian banyak pesan "Test" dalam urutan acak, dan kemudian teks Finished.

Dengan kata lain, menjalankan tugas secara paralel sebenarnya tidak mengubah aliran program. Ini akan menjalankan tugas yang berbeda pada utas yang berbeda sehingga mereka dapat dijalankan pada beberapa core CPU, untuk meningkatkan keseluruhan throughput dari program, tetapi sejauh programmer yang bersangkutan, tugas-tugas ini tidak benar-benar berjalan di "latar belakang" "Karena mereka akan dengan benang. Anda tidak perlu mengubah struktur program Anda atau melakukan sesuatu yang istimewa untuk diberi tahu ketika pekerjaan selesai. Anda tidak punya kendali atas apa yang terjadi dalam blok paralel, tetapi Anda tahu bahwa blok tidak akan mengembalikan kontrol sampai semua tugas paralel selesai.

Meskipun Ekstensi Paralel adalah besar untuk ini, itu menyebutkan bahwa PX tidak ada gunanya ketika Anda benar-benar perlu untuk menjalankan tugas di latar belakang, seperti menerapkan penjadwal, atau mendelegasikan ke utas pekerja untuk menjaga UI tetap responsif. Anda masih perlu menggunakan untaian atau komponen asinkron untuk itu.


38
2018-02-25 05:31



Inilah saluran yang baik9 Saya menonton beberapa waktu lalu tentang topik ini: http://channel9.msdn.com/posts/philpenn/Parallel-Programming-with-NET-Parallel-Extensions/


5
2018-02-25 04:36



Kerangka paralel menggunakan. NET threading model di bawahnya yang pada gilirannya dibangun di atas Windows threading model. Namun, banyak pengoptimalan yang telah dilakukan dalam kerangka umum untuk membuat pustaka paralel lebih efisien.

Blog ini memiliki detail tambahan.


1
2018-02-25 04:38



Pemrosesan Paralel adalah beberapa antarmuka mewah untuk membuat untaian otomatis. Lebih mudah menggunakan ekstensi pemrosesan paralel untuk sebagian besar tugas.


-3
2018-02-25 04:38