gpt4 book ai didi

c++ - boost/asio async_read() TCP 服务器 - 了解 io_service.run() 在 linux 上

转载 作者:太空宇宙 更新时间:2023-11-04 12:29:20 25 4
gpt4 key购买 nike

呃 - 另一个 boost/asio 问题:

我正在使用 boost/asio 作为我教授的建议,并且阅读和学习了很多关于异步操作的知识。我已经有一个功能齐全的 TCP 服务器,带有一些额外的奇怪功能,这完全不是这个问题的一部分。

我真正的问题:当我阅读异步和编写我的程序时,我经常想知道 io_service.run()。首先,我调用了 async_read();,这为 io_service 添加了工作。然后我想运行该服务,但我认为异步概念会触发操作系统对某些内容使用react并立即返回。如果事件触发,操作系统会向我发送一个信号,这会以某种方式调用我的处理程序。虽然所有这些都在后台发生,但我希望能够在完成对 run() 调用的同一线程中进行处理。但是 run() 阻塞了线程,所以我现在有一个多线程 TCP 服务器,每个 io_service 有 1 个线程,这对我来说似乎很愚蠢,在向我的教授介绍之前我想进一步澄清。

如果 run() 在异步操作开始后阻塞,我的程序是否有错误?或者这是异步操作的概念,每个 io_service 仍然需要 1 个线程?如果是后者,我可以向一个 io_service 添加多个处理程序吗?

最佳答案

当您调用 io_service::run 时,您会在当前线程中执行异步处理程序。

接收操作系统信号并调用您的处理程序的部分,您可以让多个线程运行它。

一个常见的模式是启动多个io_service::run 线程,然后在主线程中调用io_service::wait 来检查它们是否完成了。

关于c++ - boost/asio async_read() TCP 服务器 - 了解 io_service.run() 在 linux 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43738156/

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