关于时间虚幻中while循环的问题
来源:4-6 我们自己去实现事件循环

兰小宇
2019-07-29
老师,在那个while循环的逻辑中代码不算是一直阻塞的吗?
写回答
1回答
-
这个问题提的很好,如果能理解到这个地方的阻塞意义就能知道协程的真正含义了,通过这个while循环我们应该能理解到两个非常非常重要的含义:
为什么我们强调异步框架是单线程的,因为所有的一些都是通过while循环来完成的,也就是基本上所有的协程都是在while这个主逻辑中执行的,至于这里为什么是阻塞的。这个也是合理的,因为这里的阻塞只会在一个地方阻塞就是有socket事件发生,因为所有的协程逻辑执行都是因为有socket事件发生,也就是说如果所有的socket都没有任何动静,那么所有的协程都应该是停止的状态
为什么说协程中不能有阻塞的方法也就是这个原因,因为所有的逻辑协程其实都是顺序执行的,所以任何一个协程中有阻塞事件发生那么后面所有的协程都会等着,这也是为什么每个协程中将socket事件交出去都要使用非阻塞的原因
虽然看似协程都是顺序执行的,但是只要我们遵循协程中不写阻塞方法的话,那么因为cpu的执行速度远远快于io操作,所以即便是顺序执行那整个过程运行也是非常快的
022019-07-31
相似问题