С момента появления mchain-ов в версии 5.5.13 возможности SObjectizer-а по поддержке CSP-like concurrency потихонечку расширяются. Так, в грядущей версии 5.5.16 mchain-ы станут полноценными MPMC-каналами (т.е. сразу несколько нитей смогут читать сообщения из mchain-а). Плюс, конечно же, функция select, которая позволяет выбирать сообщения сразу из нескольких mchain-ов.
В связи с этим уже неправильно позиционировать SObjectizer как только лишь actor framework. Т.к. кроме actor model из коробки уже имеется поддержка и CSP channels.
А раз так, может пойти и еще дальше? И добавить в SObjectizer поддержку цепочек задач? Что-то вроде:
void initiate_image_processing(so_5::environment_t & env, image_params params) { // Готовим цепочку задач и привязываем ее к уже созданному // thread_pool-диспетчеру с именем "tasks_pool". schedule( env, so_5::disp::thread_pool::create_disp_binder("tasks_pool", ...), make_task( env, [params]() -> so_5::task< loaded_image > { ... // Какие-то действия по загрузке картинки. return loaded_image{ ... }; }) .then([]( loaded_image & img ) -> so_5::task< prepared_image > { ... // Какая-то нехилая обработка. return prepared_image{ ... }; }) .then([]( prepared_image & img ) -> so_5::task< converted_image > { ... // Какая-то еще более нехилая обработка. return converted_image{ ... }; }) .then([params]( converted_image & img ) { ... // Ну совсем замороченная обработка. so_5::send< transformed_image >(params.dest(), ...); }) ); } |
В принципе, все это можно уже сейчас проделать на агентах. Но приседаний должно быть больше. А вот если предоставить пользователю удобную и простую обертку, может кому и пригодится.
Понятное дело, что глубоко в эту тему я не копал. Но, думается, можно сделать что-то вроде Data Flow и Dependency Graphs из Intel-овской Threading Building Blocks или Task Parallelism из Microsoft-овской PPL. Вопрос только в том, нужно/интересно ли это кому-нибудь?
PS. Возможно, все это будет логичным продолжением прототипа для реактивного программирования средствами SO-5, только в другом синтаксисе.
Комментариев нет:
Отправить комментарий