sz писал(а):
У нас пользуют job manager писанный самими. На самом деле, его в основном написали для относительно прозрачной поддержки ps3, но в процессе поняли, что он для симметричных многоядерных архитектур тоже хорошо подходит. Похоже отчасти и на functional programming, и на actor based, но насколько я могу судить, не совсем то. Лень разбираться в подробностях.
...
Там смысл в том, что никакого object sharing быть вообще не должно. Есть задачи, которые обращаются к менеджеру задач для организации себя в граф. Например, создаем задачу A и говорим, что она не может выполняться пока не завершатся задачи B и С. Задача D, в свою очередь должна выполниться по завершению задачи B. А задача E должна начаться после D и C. Соответственно, менеджер задач следит, чтобы мы не посадили циклической зависимости. Ну а потом выполняет с максимально возможным параллелизмом. Сначала B и C выполняются параллельно. Потом, по завершении B, параллельно с C запускается D. Потом, по завершении C, параллельно с D запускается A. А когда заканчивается D, параллельно с A выполняется E. Ну, понятно, в общем.
Идея состоит в том, что никаких ресурсов задачи не разделяют. Каждая работает со своими. А синхронизация перенесена от данных к порядку выполнения. То есть, менеджер задач заранее имеет всю картину синхронизации и действует максимально эффективно.
Больше похоже на actor based.
А вообще если исключить или значительно минимизировать локинг, то что угодно должно работать, главное что бы было одобно и понятно программировать. А вот с этим как раз больший напряг...
sz писал(а):Его, правда, пока ни одна команда внутри EA правильно не использует, но это потому, что они тащат за собой кучу старого кода. Переписывать никому не хочется.
Вот, вот, и я о том же, уж если даже в EA переписывать лениво, то что там говорить об "обычных" компаниях...