当执行一段代码时,由CPU执行,磁盘读写、网络通信等IO操作相比于CPU执行代码的速度要慢很多,所以如果是同步的情况下,CPU遇到IO操作需要等待IO结束后才继续执行后续代码的话很浪费时间,当然可以通过多进程/多线程来让CPU在当前线程遇到IO时可以切换到其他线程,但是切换进程、线程是需要开销的,一旦线程数量过大,CPU可能忙于切换线程而不是执行代码了。
于是就有了异步。
异步是有一个消息循环模型的,CPU从消息循环队列中不断的读取消息-处理消息,当遇到IO操作时只是发出一个IO处理请求,然后就读取其他消息并开始处理,当该IO完成时会向消息队列中发消息,当CPU从获取该IO完成的消息后就可以执行该IO完成后许要执行的代码了,这样就可以实现同一个线程同时执行多个IO,而不用去切换线程。
在python中,无法利用多核来进行真正的多线程并发,但是可以用协程,通过程序控制来切换CPU处理消息队列。
网友评论