Ketika kita melihat Model Aktor dan Mengkomunikasikan Proses Berurutan kita melihat bahwa mereka berdua mencoba melakukan konkurensi berdasarkan pesan yang lewat , namun keduanya berbeda .
(Kita melihat implementasi dari Model CSP di go-lang 's goroutines (dan Clojure ini core.async ) dan Model Aktor di Scala Akka toolkit)
Saya mencoba untuk mendapatkan daftar sederhana perbedaan antara Model Aktor dan CSP. Sejauh ini saya punya:
- aktor yang meneruskan pesan tidak sinkron, passing pesan CSP sinkron
- aktor komposer , CSP tidak (harus)
- aktor selalu memiliki non-determinisme yang tidak terikat , CSP mungkin memiliki non-determinisme yang terikat atau tidak terikat
- aktor memiliki topologi variabel sedangkan CSP memiliki topologi tetap
- aktor memiliki prinsip lokalitas , CSP tidak memiliki lokalitas
- aktor dirancang berdasarkan perilaku mereka, CSP tidak harus memilikinya
Apakah ini benar? Apakah ada sesuatu yang saya lewatkan?
Asumsi
- Ketika saya mengatakan 'model aktor' - maksud saya dasar teoretis di balik implementasi dalam kerangka Akka Scala
concurrency
message-passing
hawkeye
sumber
sumber
Jawaban:
Begini menurut saya cara kerja Erlang. Saya percaya Akka sangat mirip.
Setiap proses memiliki satu kotak surat. Pesan-pesan dimasukkan ke dalam kotak surat penerima oleh pengirim, dan diambil oleh penerima menggunakan pencocokan pola. Proses pencocokan ini dapat mengubah urutan pesan dalam arti bahwa pesan terlama dalam kotak surat mungkin tidak cocok, tetapi yang lebih muda tidak. Dalam hal ini yang lebih muda dikonsumsi terlebih dahulu. Selain itu, pemesanan pesan dipertahankan.
Dengan mengingat hal ini, asinkronπ π
sumber