簡體   English   中英

使用相同的Boost.Asio io_service同步並作為線程池接受TCP連接

[英]Using the same Boost.Asio io_service for accepting tcp connections synchronously and as a thread pool

使用io_service接受tcp連接以及作為為連接的客戶端服務的線程池的以下方法是否有效,還是有一些警告?

io_service svc;
io_service::work work(svc);

// define the three threads in the io_service thread pool
thread t1( [&svc]() { svc.run(); } );
thread t2( [&svc]() { svc.run(); } );
thread t3( [&svc]() { svc.run(); } );

endpoint ep(ip::tcp::v4(), port);
acceptor acceptor(svc, ep);

while (true) {
  shared_ptr<socket> sock(new socket(svc));
  acceptor.accept(*sock);

  // post a task to the io_service
  svc.post( [sock]() {  /* do stuff on sock here */ });
}

...

很好

如果您發布的任務阻塞了很短的時間,那將是一個警告。

異步IO操作都意味着執行時間非常短 如果使用非IO任務阻塞服務線程,則IO任務將獲得較高的延遲

暫無
暫無

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

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