Open alongL opened 2 years ago
acl 协程hook了底层的I/O API,所以可以将 socket 的 I/O 过程协程,我曾在 https://mp.weixin.qq.com/s/XAEzZAUYuOhuqMOszNFe2A 文章中介绍过 acl 协程的原理,但还未曾讲过 acl 协程是如何 hook 系统 I/O API 的,将来有时间可以讲讲这块。
大概是这张图所描述的内容吧。doc/articles/aclfiber.pptx中的图。 协程运行到conn->read()的时候,通过hookapi,实现注册读事件,挂接到epoll引擎上, 读事件到来后,此协程再转为运行态。
对,原理是这样的。
大神新好!
看了acl的源码,对协程的流程基本了解,不太明白的是socket与fiber是如何联接起来的。
像下面的示例代码,fiberecho这个类是继承了acl::fiber因此可以在fiber->start()的时候运行run()虚函数,但是当conn->read() 的时候,涉及到socket的读写,如何导致与此fiber暂停,然后在read成功后再继续运行,底层是如何实现的? 有没有相关的文档介绍?