После главы про акторов попробовал прочитать главу про CSP. Это вообще лютый звиздец. Вместо рассказа про CSP идет демонстрация каких-то мутных примеров на Clojure и ClojureScript.
Может быть для любителей лиспов там и будет что-нибудь интересное. Например, подогрев теплого чувства внутри от того, что древнее скобочное убожество, программы на котором в XXI-ом веке нужно вручную записывать в обратной польской записи, еще кому-то нужно. Ведь пишут же об этом в модных и молодежных книжках.
Но вот если ты не фанат Lisp-а, и если тебе кажется, что инициирование двух операций с очень разными эффектами посредством <! и <!!, это не есть хорошо и элементарная опечатка может привести к серьезному изменению поведения программы, то ничего полезного про CSP ты не узнаешь.
Единственным положительным остатком лично для меня стало понимание того, что недавнее добавление mchain-ов в SO-5 было правильной вещью. Фактически, для C++ сделаны каналы, аналогичные Clojure-овским (буфферизированные и небуфферизированные, с выбрасыванием самого нового или самого старого сообщения, с тайм-аутами, включая отсчет общего тайм-аута для всей операции receive). Единственное, чего в SO-5 пока нет, как это возможности запустить receive сразу для нескольких mchain-ов. Но это просто из-за того, что в стандартной библиотеке C++ нет чего-то вроде WaitForMultipleObjects из WinAPI. Впрочем, хорошая тема для версии 5.5.16, с некоторой потерей эффективности такой мультканальный receive можно сделать.
Ну и еще одна штука, которая подтверждает правильность использованного в SObjectizer подхода:
The primary strength of CSP compared to actors is flexibility. In an actor program, the medium of communication is tightly coupled to the unit of execution — each actor has precisely one mailbox. In a CSP program, by contrast, channels are first class and can be independently created, written to, read from, and passed between tasks.
Что в моем вольном переводе звучит как:
Главная сильна сторона CSP в сравнении с акторами -- это гибкость. В программе с акторами коммуникации тесно завязаны на единицы исполнения -- каждый актор имеет ровно один почтовый ящик. В программе с CSP, напротив, каналы являются первоклассными сущностями и их можно независимо создавать, писать в них, читать из них, а так же передавать между задачами.
Как раз этого в SO-5 мы и достигли введя mbox-ы, которые можно создавать, в которые можно отсылать сообщения, из которых можно получать сообщения, и которые могут использоваться совместно разными агентами. Т.е. мы получили такую же гибкость, которую дает CSP, но объединив Actor Model и Publish/Subscribe. И добавив к ней недавно еще и полноценные CSP.