2013-01-10 20 views
9

this blog içinde boost :: asio kullanarak basit bir iş parçacığı havuzu oluşturma konusunda oldukça düzgün bir örnek buldum. Temelde bu gibi kullanmak istiyorum:Yükseltme :: asio iş parçacığı havuzu genel amaçlı görevler için kullan

#include <thread> 
#include <functional> 
#include <boost/asio.hpp> 

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

    std::vector<std::thread> 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, hali bildiğim kadarıyla, çoğunlukla ağ IO için yapılmış. Ancak, genel olarak genel amaçlı işlevler için kullanmak istiyorum. Eşzamanlılık sorunları, asio::io_service::strand kullanılarak sorgulanır.

Soru sorum: Programım ağ IO kullanmasa bile, böyle bir iş parçacığı havuzu oluşturmak iyi bir fikir midir? Diğer iş parçacığı havuzu uygulamalarına kıyasla belirgin bir performans kaybı var mı? Eğer öyleyse, aynı zamanda düzgün olarak daha iyi uygulamaları var mı?

+0

boost :: thread support boost :: thread_group, iş parçacığınızı gruplamak için kullanabilirsiniz – StereoMatching

cevap

6

Boost.Asio yalnızca ağ programlaması için değildir, bkz. reference documentation. Bu

  • zaman bazlı operasyonlar (deadline_timer)
  • böyle posix akışları ve Windows gibi
  • platforma özel operasyonları taşıma sinyal ı diğeri için kullandım

kolları gibi şeyler için kapsamlı destek çeşitli uygulamalarda da amaçlar. Bir örnek, uygulama için zaman uyumsuz bir arayüz sağlarken potansiyel olarak uzun süre çalışan engelleme veritabanı işlemlerine hizmet edecek bir iş parçacığı havuzu olmaktır. Boost.Asio gerçekten çok güçlü bir kütüphanedir. Önerdiğiniz gibi genel amaçlı bir iş parçacığı havuzu için kullanmak gayet iyi çalışabilir.

3

Bu gibi şeyler yapmamanın herhangi bir nedenini göremiyorum. Bir avantaj olarak, destek :: asio üzerine inşa edilmiş son tarih zamanlayıcıları gibi şeyler kullanabilirsiniz.

İlgili konular