OK, saya sedang merenungkan ini hari ini, dan saya datang untuk meminta pendapat yang sepenuhnya subjektif dan bias tentang hal itu. Paradoksnya, meskipun demikian, saya juga tidak berpikir itu adalah umpan perang api. Saya pikir ada ruang untuk percakapan yang beradab sempurna - Ini bukan Vim vs Emacs.
Saya telah menggunakan banyak abstraksi konkurensi, khususnya yang dibangun di atas utas. Ada tren besar di antara mereka, apakah itu penyampaian pesan, tidak dapat diubah-oleh-default, atau utas-lokal-secara-default atau yang lainnya.
Trennya adalah mereka semua membalikkan ide utas dengan membuat berbagi data secara eksplisit dan bukan implisit. Artinya, semua data tidak dibagikan kecuali ditentukan lain, yang merupakan kebalikan dari threading tradisional yang ditemukan dalam bahasa seperti Java. (Saya tahu Java mendukung abstraksi konkurensi tingkat tinggi miliknya sendiri.) Sebagai contoh, Anda secara eksplisit mengirim pesan. Anda secara eksplisit menyatakan variabel mana yang thread-lokal. Anda secara eksplisit menyatakan variabel mana yang bisa berubah. Ini hanya beberapa contoh yang ditemukan dalam beberapa bahasa.
Saya pikir gaya konkurensi yang mudah ini adalah konsep modern. Saya salah. Saya mulai bermain-main dengan mainan UNIX seperti garpu () dan pipa () baru-baru ini, dan saya terkejut menemukan bahwa mekanisme konkurensi eksplisit dan mudah telah ada sejak awal UNIX.
Ada sesuatu yang agak aneh tentang menyadari bahwa C + UNIX dari tahun 70-an membuat konkurensi jauh lebih mudah daripada banyak mekanisme threading modern yang trendi.
Jadi, inilah yang saya bertanya-tanya ... apakah abstraksi-abstraksi modern ini hanya mencoba untuk meniru proses gaya-UNIX di atas utas, dengan semua sifatnya yang tidak jelas dan tidak dimiliki bersama? Saya tahu bahwa beberapa mekanisme seperti STM menawarkan hal-hal seperti transaksi gaya-DB yang benar-benar solusi modern dan inovatif untuk konkurensi, tetapi sebagian besar sepertinya merupakan cara baru untuk melakukan apa yang dilakukan oleh para pengkode UNIX sejak lama.
Hanya untuk mengatakan, saya bukan penggemar UNIX, bukan oleh imajinasi. Saya menyadari bahwa prosesnya jauh lebih lambat daripada utas untuk menginisialisasi pada banyak platform, tetapi saya berbicara tentang ini dari dasar konseptual.
Jawaban:
Pengamatan yang baik, pasti ada kecenderungan untuk berbagi secara eksplisit (baik melalui bahasa fungsional atau konvensi). Komentar tentang proses yang lebih lambat saya akan beradaptasi sedikit: mereka lebih berat , yang berarti bahwa mereka tidak lebih lambat mengeksekusi dalam kinerja mentah tetapi setiap beralih di antara mereka membutuhkan waktu lebih lama daripada beralih di antara thread. Anda sudah mengetahui bahwa ada beberapa bentuk konkurensi lainnya dan mengenali STM . Saya hanya akan menambahkan bahwa ada (selain berbagi secara eksplisit dan STM) ada juga tren yang berkembang ke arah pengumpulan benang (tugas paralel; tetapkan tugas-tugas pada utas pekerja yang dimulai sebelumnya dan daur ulang mereka): Jelas cara untuk bertindak berdasarkan kinerja dan anehnya pendekatan yang berbeda untuk berbagi eksplisit karena utas gabungan biasanya semua dalam satu proses.
sumber
Saya pikir ini bukan masalah meniru X, daripada mencoba menemukan keseimbangan.
Proses yang sepenuhnya terpisah membuat hidup relatif sederhana. Mereka membuatnya cukup mudah untuk membangun hal-hal seperti jalur pipa proses yang setidaknya memanfaatkan beberapa prosesor. Ada beberapa kerugian yang cukup jelas juga - terutama kurangnya fleksibilitas, dan sedikit overhead.
Sebuah proses tunggal dengan banyak utas eksekusi berbagi pada dasarnya semua sumber daya pada dasarnya membalikkan semuanya: overhead yang lebih rendah dan banyak fleksibilitas, dengan mengorbankan lebih sulit untuk merancang dan / atau menjaga stabilitas.
Sebagian besar, yang terjadi adalah orang bekerja mencari jalan tengah yang menyediakan hampir fleksibilitas dan kecepatan benang, dengan desain yang lebih sederhana dan hasil proses terpisah yang lebih stabil (dan, saya pikir mereka sebagian besar berhasil, untuk setidaknya beberapa derajat).
sumber