Здравствуйте, AlexCasual, Вы писали:
AC>Доброго времени! AC>Стоит задача разработки библиотеки параллельных вычислений, примитив пока что такой — каждое вычисление оборачивается в задачу, которая запускается в определённое время и на выполнение которой отводится определённое время (после чего она отменяется/приостанавливается). Какой лучше избрать механизм (скорость/гибкость работы и быстрота разработки + КРОССПЛАТФОРМЕННОСТЬ) — Boost.Asio или PPL? AC>В PPL меня привлекает красивый механизм отмены задач, но напрягает то, что "за кулисами", а Boost.Asio кажется громоздкой для такой задачи. Быть может есть вообще что-то готовое, чтобы не городить велосипедов?
ищи task stealing thread pool какой-нибудь
ограничение по времени невозможно организовать нормально нигде, ты не можешь просто взять и остановить задачу, можешь только попросить ее остановиться, а задача должна периодически проверять, просят ли ее остановиться или нет, все остальное работать не будет
Доброго времени!
Стоит задача разработки библиотеки параллельных вычислений, примитив пока что такой — каждое вычисление оборачивается в задачу, которая запускается в определённое время и на выполнение которой отводится определённое время (после чего она отменяется/приостанавливается). Какой лучше избрать механизм (скорость/гибкость работы и быстрота разработки + КРОССПЛАТФОРМЕННОСТЬ) — Boost.Asio или PPL?
В PPL меня привлекает красивый механизм отмены задач, но напрягает то, что "за кулисами", а Boost.Asio кажется громоздкой для такой задачи. Быть может есть вообще что-то готовое, чтобы не городить велосипедов?
Спасибо!
Здравствуйте, AlexCasual, Вы писали:
AC>... каждое вычисление оборачивается в задачу, которая запускается в определённое время и на выполнение которой отводится определённое время (после чего она отменяется/приостанавливается).
а эти ваши вычисления, имеют точки выхода? и как вы их собираетесь отменять/приостанавливать?
между собой вычисления общаются?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, AlexCasual, Вы писали:
AC>>... каждое вычисление оборачивается в задачу, которая запускается в определённое время и на выполнение которой отводится определённое время (после чего она отменяется/приостанавливается). X>а эти ваши вычисления, имеют точки выхода? и как вы их собираетесь отменять/приостанавливать? X>между собой вычисления общаются?
Вычисления,конечно,имеют точки выхода,а останавливать- передавать объект в задачу,на котором устанавливается/опрашивается состояние.
Мы используем PPL, но правда задача немного другая. У нас сложный граф вычислений, задачи использую результаты других задач, и нет ограничений по времени. futures из буста не понравились, потому что
— нельзя было к futures прицепить несколько continuations
— под капотом нет пула потоков, async порождал новый поток
— нет кооперативной многозадачности, позвав future::get и дожидаясь результатов другой задачи, вызывающий поток не используется для вычисления других задач
А ppl проще и удобнее, хотя и в нём вылезают косяки в самых неожиданных места. Про PPL сложно что либо нагуглить. Кроссплатформенности тоже нет, хотя есть якобы кроссплатформенный проект C++ Rest SDK, но не пробовал его
Здравствуйте, AlexCasual, Вы писали:
AC>Доброго времени! AC>Стоит задача разработки библиотеки параллельных вычислений, примитив пока что такой — каждое вычисление оборачивается в задачу, которая запускается в определённое время и на выполнение которой отводится определённое время (после чего она отменяется/приостанавливается). Какой лучше избрать механизм (скорость/гибкость работы и быстрота разработки + КРОССПЛАТФОРМЕННОСТЬ) — Boost.Asio или PPL? AC>В PPL меня привлекает красивый механизм отмены задач, но напрягает то, что "за кулисами", а Boost.Asio кажется громоздкой для такой задачи. Быть может есть вообще что-то готовое, чтобы не городить велосипедов? AC>Спасибо!
Также Вы можете обратить внимание на SObjectizer. А небольшой пример работы с ним можно посмотреть в этой статье.