Tornado中如何应用的epoll?
来源:6-2 aiomysql完成数据的读写....

烈焰卡卡
2019-06-26
课程中提到tornado底层用的epoll,但是没有细讲如何用的。
但是课程中讲了tornado其实就是一个ioloop事件循环,我从网上的文章搜了下这个ioloop如何和epoll结合串联的,但是不太确定,想描述下希望老师指点是否正确。
Ioloop中始终有一个协程进行epoll进行监听,当所有协程都在await状态时,epoll会监听直到有socket活跃,并且调用回调方法将future的result赋值。然后再跳出这个协程继续事件循环。
不知上面的描述是否正确
1.如果不正确请指正
2.如果正确想问一下,这个epoll监听我记得在视频中老师调用时是一个阻塞方法,那么这个协程该如何跳出去,等其他协程都处于等待状态时再继续回来进行epoll监听?
写回答
1回答
-
课程中在4-6小节着重介绍了事件循环的核心原理, ioloop本身就是一个线程而不是协程,这个线程做两件很重要的事情,就是用阻塞的方式监听epoll,这个地方阻塞没有关系,因为阻塞代表的是没有socket可用,这个时候没有协程需要执行,所以这个地方没有问题,ioloop还有另一个很重要的工作就是监听到socket以后就调用对应的协程,所以你会发现实际上所有的协程执行时有顺序的,如果一个协程中调用了阻塞的方法,这个时候即使有socket准备好了,依然执行不到,这个也就是课程中强调的不要在协程中调用阻塞方法,至于为什么协程按顺序执行依然是高并发的,就在于虽然协程中会执行逻辑,但是只要这个逻辑非io的那这个逻辑执行的是非常快的,远比io快很多。
希望上面能解决你的疑问
012019-06-28
相似问题