Создание пула потоков для форсированных потоков - PullRequest
2 голосов
/ 28 сентября 2011

Существует два подхода к созданию пула потоков для потоков повышения, поскольку поток расширения не предоставляет пул потоков напрямую.

Первый -

    asio::io_service io_service;
    asio::io_service::work work(io_service);
    boost::thread_group threads;

    for (std::size_t i = 0; i < my_thread_count; ++i)
        threads.create_thread(boost::bind(&asio::io_service::run, &io_service));

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

    io_service.stop();
    threads.join_all();

Второй использует неофициальный пул потоков отсюда http://threadpool.sourceforge.net/

     void taskfunc();

     // later on...
     pool my_pool;
     my_pool.schedule(&taskfunc);

Мой вопрос: какой из этих двух подходов лучше? Есть ли какие-то конкретные преимущества друг перед другом? Спасибо ..

...