簡體   English   中英

阻止Boost Asio Worker線程

[英]Blocking Boost Asio Worker Threads

我正在開發基於Boost :: Asio的網絡服務器。

我有一個IO工作線程的boost::thread_groupboost::thread_group來調用boost::asio::io_service::run( )

當發生網絡活動時, ASIO使用這些工作線程之一來處理活動(例如,接受或接收)。

然后,我的應用程序會做一些工作,可能會進行一些計算,可能會進行其他一些IO(通過boost),可能還會進行一些數據庫活動。

我想知道在這些線程中進行上述工作的含義。 特別:

  • 在IO線程上執行(可能需要大量工作)是否會使io_service感到悲傷?

更具體地說:我應該考慮的其他問題。

在IO線程上執行(可能需要大量工作)是否會使io_service感到悲傷?

這真的取決於您的悲傷含義。 在由調用的處理程序執行長時間運行的操作io_service可以從由被調用阻止其他處理程序io_service 考慮最簡單的示例,該示例具有一個調用io_service::run()單線程。 如果處理程序由異步操作調用,例如async_read()然后執行一些可能長時間運行的數據庫操作,則在長時間運行的操作完成並且處理程序將控制權返回給io_service之前,其他未完成的異步操作將不會調用其處理程序。

通常可以通過從多個線程調用io_service::run()並使用strand來確保對使用共享數據的處理程序的獨占訪問來緩解這種情況。 盡管如果所有處理程序都執行一些長時間運行的操作,則可能需要研究替代設計。

暫無
暫無

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

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