【发布时间】:2017-05-02 12:41:01
【问题描述】:
呃 - 另一个提升/asio 问题:
我使用 boost/asio 作为我教授的建议,并做了很多关于异步操作的阅读和学习。我已经有一个功能齐全的 TCP 服务器,带有一些额外的奇怪功能,这完全不是这个问题的一部分。
我真正的问题:
当我阅读异步和编写程序时,我经常想知道io_service.run()。首先,我拨打async_read(); 的电话,这为io_service 添加了工作。然后我想运行该服务,但我认为异步概念会触发操作系统对某些东西做出反应并立即返回。如果事件触发,操作系统会向我发送一个信号,该信号会以某种方式产生对我的处理程序的调用。虽然所有这些都发生在后台,但我希望能够在完成对 run() 的调用的同一线程中等待时处理事情。但是run() 阻塞了线程,所以我现在有一个多线程 TCP 服务器,每个 io_service 有 1 个线程,这对我来说似乎很愚蠢,我想在向我的教授介绍之前进一步澄清。
如果在异步操作启动后run() 阻塞,我的程序是否有错误?或者这是异步操作的概念,每个 io_service 仍然需要 1 个线程?如果是后者,我可以向一个 io_service 添加超过 1 个处理程序吗?
【问题讨论】:
标签: c++ linux multithreading asynchronous boost-asio