Apakah Abstraksi Konkurensi meniru Proses UNIX?


8

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.


Bukan pertanyaan yang buruk tetapi masalahnya adalah: "Saya pikir ada ruang untuk [...] percakapan".

Saya menambahkan bahwa itu tidak langsung ditutup sebagai subjektif / pendapat :) Saya benar-benar tertarik untuk mendengar pikiran orang tentang ini ...

Pertanyaan bagus. Saya pikir Anda kehilangan audiens yang lebih besar untuk pertanyaan dengan meninggalkan tag bahasa pemrograman (meskipun saya mengerti mengapa Anda melakukan itu). Anda mungkin mendapatkan beberapa umpan balik tambahan dengan menyertakan tag seperti kinerja, pengujian, atau penandaan bangku. Mungkin ada tag lain yang tidak saya sadari yang akan memperluas respons Anda (ada orang?). Semoga berhasil!
shellter

saya akan merekomendasikan menghapus tag unix karena pertanyaan Anda jelas tidak terbatas pada domain unix. banyak orang memiliki sistem operasi khusus dalam tag pengabaian mereka (seperti saya dengan OS-X).
Bernd Elkemann

Saya pikir itu lebih mungkin bahwa abstraksi konkurensi adalah "meniru" (lebih tepatnya, didasarkan pada) Mengkomunikasikan teori proses sekuensial
nyamuk

Jawaban:


1

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.


Saya mengubah saluran kinerja agar sesuai dengan apa yang Anda katakan. Menariknya, saya kadang-kadang menggunakan ProcessPool dengan Python, yang seperti penyatuan utas, kecuali kumpulan proses, bukan utas. Bahkan di Windows sepertinya berfungsi dengan baik. Lagipula aku belum terlalu memaksakannya. Saya membayangkan bahwa kumpulan proses adalah cara yang rapi untuk melakukan konkurensi dalam bahasa dengan runtimes yang tidak memiliki harapan di multithreaded dalam waktu dekat ( batuk GIL batuk ).

Sungguh aneh bahwa kumpulan thread sering menggunakan satu proses - saya akan berpikir mereka akan membaginya di banyak proses karena ada core CPU.

1
@ Louis: setiap utas dapat berjalan di inti yang berbeda.
ninjalj

@ninjalj: Maaf, sedikit momen yang mematikan otak dari saya di sana. Saya kira saya masih secara tidak sadar memikirkan pool proses.

Mengingat bahwa jawaban ini memberikan banyak info, saya akan menandainya sebagai diterima. Menyatakan jawaban 'diterima' dalam konteks subjektif terasa sedikit aneh, tetapi saya merasa itu dibenarkan :)

2

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).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.