[英]boost/asio async_read() TCP Server - Understanding io_service.run() on linux
恩-另一个Boost / Asio问题:
我是根据教授的建议使用boost / asio的,并且做了很多有关异步操作的阅读和学习。 我已经拥有一个具有某些额外怪异功能的功能齐全的TCP Server,这完全不是这个问题的一部分。
我真正的问题:当我读异步程序并编写程序时,我经常想知道io_service.run()
。 首先,我调用async_read();
,这会为io_service添加工作。 然后,我想运行该服务,但是我认为异步概念会触发OS对某些事情做出反应并立即返回。 如果事件触发,操作系统将向我发送信号,从而以某种方式产生对我的处理程序的调用。 虽然所有这些事情都是在后台发生的,但我希望能够在完成对run()
的调用的同一线程中等待的同时进行处理。 但是run()
阻塞了线程,所以我现在有一个多线程TCP Server,每个io_service有1个线程,这对我来说似乎很愚蠢,在向我的教授介绍之前,我想进一步澄清一下。
如果run()
异步操作后run()
阻塞,程序中是否存在错误? 还是这是异步操作的概念,并且每个io_service仍然需要1个线程? 如果是后者,我可以向一个io_service添加多个处理程序吗?
当您调用io_service::run
,您将在当前线程中执行异步处理程序。
这是接收OS信号并调用处理程序的部分,您可以运行多个线程。
一种常见的模式是启动许多io_service::run
线程,然后在要检查线程是否完成的主线程中调用io_service::wait
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.