gpt4 book ai didi

c++ - 阻塞 Boost Asio 工作线程

转载 作者:行者123 更新时间:2023-11-28 08:10:21 26 4
gpt4 key购买 nike

我正在开发一个基于 Boost::Asio 的网络服务器。

我有一个 boost::thread_group 的 IO 工作线程,我用它来调用 boost::asio::io_service::run( )

当网络事件发生时,ASIO 使用这些工作线程之一来处理事件(例如接受或接收)。

然后我的应用程序会做一些工作,可能是一些计算,可能是一些其他 IO(通过 boost)和一些数据库事件。

我想知道在这些线程中进行上述工作的含义是什么。具体来说:

  • 是否在 IO 线程上执行(可能是重要的工作)会导致io_service 有什么遗憾吗?

更具体地说:我应该考虑的任何其他问题。

最佳答案

Does carrying out ( possibly significant work ) on the IO threads cause the io_service any grief?

这真的取决于你所说的悲伤是什么意思。在由 io_service 调用的处理程序中执行长时间运行的操作可以阻止其他处理程序被 io_service 调用。考虑使用单个线程调用 io_service::run() 的最简单示例。如果由异步操作调用的处理程序,例如 async_read() 然后执行一些可能长时间运行的数据库操作,则其他未完成的异步操作将不会调用其处理程序,直到长时间运行的操作完成并且处理程序将控制权返回给 io_service

这通常通过从多个线程调用 io_service::run() 并使用 strand 来确保对使用共享数据的处理程序的独占访问来缓解。尽管如果您的所有处理程序都执行一些长时间运行的操作,您可能需要研究替代设计。

关于c++ - 阻塞 Boost Asio 工作线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9312367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com