我还是不是很明白IO多路复用是怎么用单线程解决高并发的呀

来源:12-4 select+回调+事件循环获取html-2

放牛班的春天0

2020-11-08

我还是不是很明白IO多路复用是怎么用单线程解决高并发的呀,当select到了socket的时候,线程去处理这个socket,这个过程不也是阻塞的吗,那么顺序的去执行select到的socket,这算是实现高并发了吗

写回答

1回答

bobby

2020-11-10

能问到这个问题,说明你是经过思考的,select之后确实去执行了这个处理了,所以当处理这个socket的时候,理论上即使你有新的数据返回了,但是当前的线程在处理socket逻辑,所以你新数据来了也处理不了。所以这里的关键点在于: cpu的处理速度是远远大于io处理的,所以你应该知道,即使去处理这个socket,只有这个socket处理过程中不涉及到新的io操作,那么即使等待我处理完再回过头来处理下一个socket也是很快的,这就是为什么是并发不是并行的根本,因为这里只是看起来是并行的,实际上是在一个短的时间内处理了大量的请求,还有就是为什么课程中一再强调你的socket处理逻辑中不能有新的io阻塞操作,因为一旦阻塞了,那么select的下一个处理就得等

1
9
bobby
回复
慕哥9471875
数据不会丢失的
2022-12-01
共9条回复

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程