簡體   English   中英

對於帶有單個接受器的線程boost :: asio服務器,我們是否需要每個線程有多個io_service

[英]Do we need multiple io_service per thread for threaded boost::asio server with a single acceptor

我對boost::asio經驗不多。 我有一些非常基本的問題。

我是否需要在不同的thread下使用不同的io_service和不同的socket ,而只需要一個acceptor來處理線程服務器中的客戶端?

我相信我必須為新客戶提供不同的套接字。 但是如果所有線程使用相同的io_service那么它是並行的嗎?

我在asio部分通過http://en.highscore.de/cpp/boost/index.html說我需要在不同的線程中使用不同的io_services來實現並行化。

我是否計划每次在acceptor.async_accept出現新客戶端時創建一個創建new TCPsession的Server類
TCPSession ctor創建一個io_service和一個thread並在它自己的線程中運行io_service.run()它是一個好的設計嗎?

但是在這個設計中我會加入所有這些線程嗎? 我是否需要另一個main io_service ,以便在獲得新客戶端之前它不會終止?

在單個線程中運行的單個io_service可以為項目中的所有asio對象提供服務。 在這樣的設計中,i / o仍然是“並行的”,因為它是非阻塞的,異步的; 但由於io_service::run()是在一個單獨的線程中運行的,所以所有的完成處理程序都將逐個串行調用。

要在多個CPU上擴展網絡模塊,可以使用以下兩種方法之一:每個內核的線程,每個內核的io_service - 請參閱HTTPServer2和HTTPServer3示例

在任何情況下,每個TCPSession創建一個線程或io_service似乎是一個不必要的開銷 - 想想你有成千上萬的TCPSession的情況......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM