十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Python教程:精简概述I/O模型与I/O操作
站在用户的角度思考问题,与客户深入沟通,找到开江网站设计与开江网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站建设、网站制作、企业官网、英文网站、手机端网站、网站推广、申请域名、虚拟主机、企业邮箱。业务覆盖开江地区。
一. I/O 模型
1. Process 调用 Kernel 发出请求
1.1 Kernel 等待数据准备就绪(Waiting)
1.2 Kernel 拷贝数据到用户空间(Copying)
3. Kernel 通知 Process 拷贝完成
4. Process 接收数据,并进行处理
1. server 端通过 recv() 调用 Kernel
1.1 Kernel 等待接收 client 端 send() 数据并加入缓冲区
1.2 Kernel 将缓冲区数据 copy 到 server 的用户内存空间
2. Kernel copy 完毕之后通知 server
3. server 接收并处理数据
问题:Waiting 阶段、Copying 阶段处于阻塞状态,程序只能处理一个网络连接
解决方案:开启多线程/多进程
效果:
每个连接都拥有独立的线程/进程,任一连接阻塞都不会影响其他连接
问题:
遇到需要同时响应大量的连接请求,多线程/多进程会严重占据系统资源
改进方案:连接池、线程池
效果:
连接池可减少创建/关闭连接的频率,重用已有连接
线程池可减少创建/销毁线程的频率,维持一定合理数量的线程
问题:
“池”始终有上限,当请求数量大大超过上限时,系统响应效率未必更高
效果:
程序能够在等待数据就绪的时间里,去执行其他工作
问题:
不断循环往复地调用系统将,大幅度推高 CPU 占用率
人为加入延迟降低循环速度,又会导致数据吞吐量降低
效果:占用资源少,不会消耗过多 CPU,能够同时为多客户端提供服务
问题:对于单一客户端的连接请求并不能处理得更快,不适用于单个连接
异步IO下的执行流程:
1. Process 调用 Kernel 发出请求,立刻去做其他事务
2. Kernel 先立刻返回应答给 Process
3. Kernel 再准备数据(Waiting)
4. Kernel 拷贝到数据到用户空间(Copying)
5. Kernel 完成数据拷贝,发 Signal 到 Process
6. Process 回来继续该 IO 操作
二. IO 操作
更多的Python学习教程下期继续更新!
这里有整理视频教程,刚好在学习的伙伴,可以回复:Python教程,领取!
Python 900集全套视频教程(全家桶)https://pan.baidu.com/s/1cU5lDWq9gh0cQ7hCnXUiGA 提取: