2013-06-18 62 views
0

我爲接受者(偵聽者)使用了10個線程池,它們是接受連接並在其他線程中運行其處理任務。在這種情況下,我需要一個或多個acceptor對象?boost :: asio :: ip :: tcp :: acceptor有多少個對象我需要接受多個線程中的連接嗎?

{ 
    boost::asio::io_service io_service_acceptors; 
    boost::asio::io_service::work work_acceptors(io_service_acceptors); 

    // Do I need a single object or many like threads "thr_grp_acceptors"?: 
    // std::vector<boost::asio::ip::tcp::acceptor> acpt_grp_acceptors 
    boost::asio::ip::tcp::acceptor acceptor(io_service_acceptors, 
     ba::ip::tcp::endpoint(ba::ip::tcp::v4(), port)); 

    std::vector<boost::thread> thr_grp_acceptors; 

    for(size_t i = 0; i < 10; ++i) 
     thr_grp_acceptors_.emplace_back(
      boost::bind(&boost::asio::io_service::run, &io_service_acceptors)); 

    acceptor_.async_accept(...); 
} 

回答

1

你的第二個和其他受體將無法​​bind()的進港,這樣不行,你不能在同一端口上使用的許多受體。您可以一次運行多個async_accept,它們的處理程序可以在不同的線程中觸發。但是,在我的應用程序中,我一次只有一個活動的async_accept,在負載很重的情況下它足夠我。

+0

謝謝!在NUMA系統中是否有任何意義:爲每個CPU(不是核心)創建單獨的線程池,將這些線程(設置關聯)綁定到此CPU的核心,並且爲每個池創建一個受約束的綁定)到同一個CPU?由於單CPU中兩個CPU和兩個Cores之間的同步具有不同的延遲。 – Alex

+0

@Alex我認爲你將無法從這種低級優化中獲益,同時使用ASIO – PSIAlt

+0

這樣的高級框架。但是,通過使用boost :: asio或在重負載項目中您的硬件上連接了多少(多少)連接,可以實現多少個連接? – Alex

相關問題