并发编程之IO模型

一、阻塞IO(blocking IO) 线程池阻塞IO服务端 线程池阻塞IO客服端 二、非阻塞IO(non-blocking IO) 服务器 客服端 迭代期间不能修改被迭代的对象 三、多路复用IO(IO multiplexing) 服务器 客户端 四、异步IO(Asynchronous I/O) 模拟异步IO conclusion: 网络 IO模型 一、阻塞IO模型 多线程 多进程 线程池 进程池 全是阻塞IO 二、非阻塞IO 协程是一种非阻塞IO 1.setblocking(False) 将阻塞修改为非阻塞 2.一旦是非阻塞 在执行accept recv send 就会立马尝试读写数据 一旦数据没准备好就抛异常 3.捕获异常 4.如果没有异常说明数据准备好了 直接处理 5.捕获到异常 那就做别的事情 可以实现单线程并发的效果 会大量占用CPU资源 三、多路复用 将所有连接交给select来管理 管什么? 管哪个连接可以被处理 作为处理任务的一方事情变少了 不需要重复不断的问操作系统拿数据 而是等待select返回需要处理的连接,等待则意味着select是阻塞的 异步IO 不仅仅指网络IO 也包括本地IO 非阻塞IO 和 多路复用 解决都是网络IO的阻塞问题 本地IO 可以通过子线程 或子进程 来避免阻塞 但是对子线程或子进程而言 依然会阻塞 最终的解决方案就是协程 asyncio 该模快实现异步IO 内部使用协程实现 Time the study pain is temporary,has not learned the pain is life-long.https://www.cnblogs.com/wanlei/p/9965416.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信