boost的asio异步调用的疑问

更新时间:02-02 教程 由 棼谷 分享

boost的asio异步调用的疑问?

这里只说asio的stackful routine,它是通过BOOST.COROUTINE里的非对称协程实现的。非对称协程很容易实现生产者/消费都模型,它可以简单理解成一个pull_type(消费者)+一个push_type(生产者),两者都可以通过调用自己的operator()来让出控制权,看起来很像是用goto语句在函数中间跳入跳出。但由于协程交出控制权时是保存了状态的,所以在重新拿到控制权后能够接着从让出位置处继续执行。明白非对称协程后就很容易理解ASIO了。ASIO里创建协程是通过spawn完成的:

这里相当于由io_service和function组成了一对非对称协程,io_service扮演pull_type,function扮演push_type。平时io_service处于io阻塞状态,有事件到达时将控制权交给function,function处理到需要下一个io事件时,又把控制权交还给io_service,以此循环直到function结束。现在来回答你的两个问题:交出控制权后切换到哪个协程了???可以理解成切换到io_service::run里面去了。切换过去干了啥??? 切换过去等待对应的io事件.

声明:关于《boost的asio异步调用的疑问》以上内容仅供参考,若您的权利被侵害,请联系13825271@qq.com
本文网址:http://www.25820.com/tutorial/14_2297282.html