Как работают актеры по сравнению с потоками?
есть ли хорошее и краткое объяснение того, как актеры работает по сравнению с потоками?
не может ли поток рассматриваться как актер и отправлять сообщения другим потокам? Я вижу некоторую разницу, но это не ясно для меня. Могу ли я использовать актеры на любом языке, используя потоки по-разному?
2 ответа:
модель актера работает при передаче сообщений. Отдельные процессы (акторы) могут отправлять сообщения друг другу асинхронно. Что отличает это от того, что мы обычно считаем потоковой моделью, так это то, что нет (по крайней мере теоретически) общего состояния. И если кто-то считает (справедливо, я думаю), что общее состояние является корнем всего зла, то модель актора становится очень привлекательной.
мы не должны волноваться, однако. Актер модель не делает (вопреки некоторым утверждениям) сделать невозможным наличие тупиков. Модель актора также не препятствует конкуренции за ресурсы между различными процессами - например, очередями сообщений. Модель только "lock-free" выше определенного уровня. На более низком уровне для координации очередей сообщений по-прежнему требуется блокировка.
не может ли поток рассматриваться как актер и отправлять сообщения другим потокам?
Я бы не сказал, что актеры всегда проходят сообщения асинхронно--это было бы слишком медленно. Например, проект JActor использует двухсторонние сообщения (запрос/ответ) для лучшей модели вызова метода. И большинство запросов обслуживаются синхронно.
JActor (библиотека Java) также не использует блокировки. Только некоторые атомарные и параллельные структуры данных с несколькими семафорами. Передача сообщений происходит .8 миллиардов сообщений в второй.