![](/img/trans.png)
[英]Design for Boost ASIO , Worker threads SQl queries for 'practical' web server
[英]Blocking Boost Asio Worker Threads
我正在開發基於Boost :: Asio的網絡服務器。
我有一個IO工作線程的boost::thread_group
, boost::thread_group
來調用boost::asio::io_service::run( )
當發生網絡活動時, ASIO使用這些工作線程之一來處理活動(例如,接受或接收)。
然后,我的應用程序會做一些工作,可能會進行一些計算,可能會進行其他一些IO(通過boost),可能還會進行一些數據庫活動。
我想知道在這些線程中進行上述工作的含義。 特別:
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.