Использование пула потоков boost :: asio для задач общего назначения

Вэтот блог Я нашел довольно хороший пример того, как создать простой пул потоков с помощью boost :: asio. Я в основном хочу использовать это так:

#include 
#include 
#include 

int main ( int argc, char* argv[] ) {
    asio::io_service io_service;
    asio::io_service::work work(io_service);

    std::vector threadPool;

    for(size_t t = 0; t < std::thread::hardware_concurrency(); t++){
        threadPool.push_back(thread(std::bind(&asio::io_service::run, &io_service)));
    }

    io_service.post(std::bind(an_expensive_calculation, 42));
    io_service.post(std::bind(a_long_running_task, 123));

    //Do some things with the main thread

    io_service.stop();
    for(std::thread& t : threadPool) {
        t.join();
    }
}

Насколько я знаю, Boost :: asio в основном предназначен для сетевого ввода-вывода. Тем не менее, я в основном хочу использовать его для функций общего назначения. Проблемы параллелизма будут решаться с помощью.asio::io_service::strand

Итак, мой вопрос: это хорошая идея для создания пула потоков, как это, даже если моя программа не использует сетевой ввод-вывод? Есть ли очевидные потери производительности по сравнению с другими реализациями пула потоков? Если так, то есть ли лучшие реализации, которые также так аккуратны?

Ответы на вопрос(3)

Ваш ответ на вопрос