loop是整个程序的心脏,知道调用什么样的代码,去运行什么方法,不会再阻塞到我们的建立连接或网络请求过程中,loop不停的向我们的操作系统请求哪些socket已经准备好了。一旦准备好了之后立马执行这里边的回调方法,回调方法里是没有我们费io的操作的,全部都是cpu的操作,cpu操作是远远高于我们的io操作的,
#事件循环,不停的请求socket的状态并调用对应的回调函数
def loop():
#1. select本身是不支持register模式 (支持readable writeable句柄)
#2. socket状态变化以后的回调是由程序员完成的 ,select会找到这些register
while not stop:
ready = selector.select()
for key, mask in ready:
# 注册的回调函数call_back
call_back = key.data
call_back(key)
#回调+事件循环+select(poll\epoll)