繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM