Ерланг та Го одночасне програмування, об'єктивні відмінності між CSP та акторами?


19

Я шукав одночасне програмування на мовах програмування Erlang та Go. Згідно з моїми висновками, вони використовуються відповідно з моделлю Actor та CSP.

Але я все ж плутаю те, які об’єктивні відмінності між CSP та Акторами? це просто теоретично інше, але однакове поняття?


Ну вони не однакові, оскільки Go надає інший набір примітивів, ніж Ерланг. Крім того, Go набагато нижчий рівень, ніж Erlang та C-подібний.
Даніель Гратцер

Питання про те, якою мовою, технологією чи проектом слід займатись далі, не є темою для програмістів, оскільки вони можуть залучати лише суб'єктивні думки для відповідей. Занадто багато окремих факторів, які стоять за запитанням, щоб створити відповіді, які матимуть тривале значення. Рекомендоване читання: Gorilla vs Shark
gnat

3
@gnat Я не згоден, це питання про об'єктивні відмінності між CSP і акторами. Це абсолютно розумне питання
Даніель Гратцер

2
Питання полягає не в тому, що це добре чи погано, а має бути визначене інше, тому це питання є конкретним і не є причиною для суб'єктивних дискусій.
nish1013

1
На це питання є дуже приємна відповідь на Теорії CS StackExchange: Яка різниця між акторською моделлю паралельності та
Jörg W Mittag

Відповіді:


21

На практиці різниця дуже незначна: обидва представляють окремі одиниці виконання, основний інтерфейс із зовнішнім світом здійснюється через повідомлення.

Відмінності полягають у деталях реалізації мов. Ось кілька таких деталей:

  • Канали в Go набираються; якщо ви хочете надсилати повідомлення з різними даними, вам потрібні окремі канали. У Erlang ви receiveотримуєте все, що надсилається в процес, і має відповідати шаблону (у Go, ви б використовували selectдекілька випадків, тому код буде виглядати дуже схоже, лише з різними каналами).
  • Будь-хто може прочитати або написати канал Go. У Ерланге кожен може надіслати процес, але отримає лише той процес. Це стає важливим, якщо ви хочете розділити завдання між кількома працівниками: у Erlang потрібно створити процес розподілу, тоді як Go може просто поділитись каналом.
  • Erlang забезпечує (в основному) прозорий шлях до розподілу процесів на декілька хостів / VM. Горутини обмежуються єдиним процесом (хоча є бібліотеки для розповсюдження).
  • Помилка обробки дуже відрізняється. Ерланг розглядає кожен процес як незалежний: помилка в одному процесі (скажімо, розділити на 0) не вплине на будь-які інші процеси, якщо ви явно не зв’яжете їх (хоча щось очікування повідомлення від мертвого процесу зависне). Усі програми виконуються в одному технологічному просторі; поділ на 0 зніме всю програму.
  • У Ерланге дані незмінні. Це означає, що вся комунікація між процесом і зовнішнім світом відбувається через повідомлення. Go дозволяє вам поділитися станом між goututines (хоча і не слід).

Цей останній пункт - я думаю, найважливіший. Хоча обидва використовують повідомлення як основний засіб спілкування, Ерланг дає набагато більш сильні гарантії щодо того, як і коли стан може змінюватися.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.