首页 > 编程语言 > 详细

PythonStudy——IO模型

时间:2019-06-10 21:47:54      阅读:82      评论:0      收藏:0      [点我收藏+]

IO模型

模型就是解决某个问题的套路

IO问题:

输入输出

阻塞IO模型

我要一个用户名用来执行登陆操作,问题用户名需要用户输入,输入需要耗时, 如果输入没有完成,后续逻辑无法继续,所以默认的处理方式就是 等待!!!

将当前进程阻塞住,切换至其他进程执行,等到按下回车键,拿到了一个用户名,再唤醒刚才的进程,将状态调整为就绪态

存在的问题

当执行到recv时,如果对象并没有发送数据,程序阻塞了,无法执行其他任务

解决方案

    多线程或多进程

当客户端并发量非常大的时候,服务器可能就无法开启新的线程或进程,如果不对数量加以限制 服务器就崩溃了

    线程池或进程池

首先限制了数量 保证服务器正常运行,但是问题是,如果客户端都处于阻塞状态,这些线程也阻塞了

    协程

使用一个线程处理所有客户端,当一个客户端处于阻塞状态时可以切换至其他客户端任务

 

非阻塞IO模型

阻塞IO模型在执行recv 和 accept 时 都需要经历wait_data

非阻塞IO即 在执行recv 和accept时 不会阻塞 可以继续往下执行

如何使用

将server的blocking设置为False 即设置非阻塞

存在的问题 

这样一来 你的进程 效率 非常高 没有任何的阻塞

很多情况下 并没有数据需要处理,但是我们的进程也需要不停的询问操作系统 会导致CPU占用过高

而且是无意义的占用

PythonStudy——IO模型

原文:https://www.cnblogs.com/tingguoguoyo/p/11000462.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!