IO 理论 SOCK理论
IO密集型程序
在程序执行过程中存在大量IO操作,而CPU操作较少,消耗CPU较少,运行效率较低
CPU(计算)密集型程序
在程序执行中,CPU运算较多,IO操作相对较少(消耗CPU大,运行速度快)
IO分类: 阻塞IO
阻塞情况: 是IO的默认形态,是效率较低的一种IO情形
1 因为某种条件没有达成造成的阻塞
accept input recv
2 处理 IO端数据传输时间较长形成的阻塞
网络传输过程,文件读写过程
非阻塞IO : 通过IO事件的属性,使其变成非阻塞状态,(让一些条件阻塞函数不再阻塞)
非阻塞IO往往和循环判断一起使用
s.setblocking(False)
将套接字设置为非阻塞状态(默认为阻塞状态)
超时检测: 将原本阻塞函数,设置一个最长阻塞时间,如果条件时间内达成则正常运行,如果仍然阻塞则被视为超时,继续向下运行或产生异常
s.settimeout(sec) 设置套接字超时时间
IO多路复用 :同时监控多个IO事件,当哪个IO事件准备就绪,就执行哪个IO事件,以此形成可以同时操作多个IO的并发行为,避免一个IO阻塞,造成所有IO都无法执行
IO准备就绪:是一种IO必然发生的临界状态
IO多路复用的编程实现:
1 将IO设置成为关注IO
2 将关注IO提交给内核监视
3 处理内核给我们反馈的准备就绪的IO
具体:select --> windows linux unix
poll -->linux unix
epoll -->linux unix
select 模块:
import select
rs,ws,xs = select(rlist,wlist,xlist[,timeout])
功能: 监控IO事件,阻塞等待IO事件发生
参数:
rlist :列表, 存放我们监控等待处理的IO事件
wlist :列表,存放我们要主动操作的IO事件
xlist :列表: 我们要关注出错处理的IO事件
timeout: 超时时间
返回值 :
rs 列表 rlist中准备就绪的IO
ws 列表 wlist中准备就绪的IO
xs 列表 xlist中准备就绪的IO
注意:
1 wlist中如果有IO事件则select立即返回到ws
2 在处理IO过程中不要处理一个客户端长期占有服务端,使服务端无法运行到select 的情况
3 IO多路复用占用计算机资源少,IO效率高 POLL
1 创建POLL对象
p= select.poll()
2 添加注册事件
p.register(s,事件) 关注S的所有IO事件
| 事件常量 | 意义 |
|---|---|
| POLLIN | 有数据读取 |
| POLLPRT | 有数据紧急读取 |
| POLLOUT | 准备输出:输出不会阻塞 |
| POLLERR | 某些错误情况出现 |
| POLLHUP | 挂起 |
| POLLNVAL | 无效请求:描述无法打开 |
3 阻塞等待IO发生
events = poll.poll()
功能 :阻塞等待IO发生
返回值 :events是一个列表,列表中的每个元素都是一个元组,代表一个发生的IO事件
例子 --> (s.fileno() , event)
( 就绪文件描述符, 对应的IO事件)
使用 :需要通过文件描述符(fileno)找到对应的IO对象,然后来操作这个IO对象
4 处理具体的IO epoll方法
使用方法 : 基本与poll方法相同
* 将生产对象 poll() 改为 epoll()
* 将所有poll对象事件改为epoll对象事件
区别:
epoll 的效率要比 poll 和select 高
epoll 的触发方式更多
EPOLLET : 边缘触发 优点:
没有 fd 数量限制,取决于系统内存的大小,一般来说 1GB 就可以有 10W个
内核和用户控件使用同一块内存,mmap技术,没有用户态和内核态之间的拷贝,提高效率
无需遍历所有,仅仅只需要遍历已经就绪的 fd 即可
工作原理:
本地套接字
linux 文件
b (块设备文件) c(字符设备文件) d(目录)
- (普通文件) l(链接) s(套接字)
p(管道)
作用 :用于本地不同的程序间进行通信
创建流程 :
1 创建本地套接字
sockfd = socket(socket.AF_UNIX,socket.SOCK_STREAM)
2 绑定本地套接字文件
* 选定文件位置和名称
* sockfd.bind(path)
3 监听 listen()
4 消息收发 recv() send()
os.path.exists(path)
功能 : 检测一个文件是否存在
参数 :文件路径
返回 : 存在返回 True 否则返回False
删除文件:
os.remove(path) os.unlink(path)
功能 :删除一个文件
参数 :目标文件
IO 理论 SOCK理论的更多相关文章
- 【转】分布式理论-CAP理论
一 CAP理论简述 CAP (Consistency, Availability, Partition Tolerance,) 理论是NoSQL数据库管理系统构建的基础. 强一致性:等同于所 ...
- 分布式_理论_02_Base 理论
一.前言 五.参考资料 1.分布式理论(二)——Base 理论 2.分布式理论(二) - BASE理论
- (理论篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝
为了快速构建项目,使用高性能框架是我的职责,但若不去深究底层的细节会让我失去对技术的热爱. 探究的过程是痛苦并激动的,痛苦在于完全理解甚至要十天半月甚至没有机会去应用,激动在于技术的相同性,新的框架不 ...
- NoSql的三大基石:CAP理论&BASE&最终一致性
关系型数据库的局限 NoSql出现在关系型数据库之后,主要是为了解决关系型数据库的短板,我们先来看看随着软件行业的发展,关系型数据库面临了哪些挑战: 1.高并发 一个最典型的就是电商网站,例如双11, ...
- 10分钟了解分布式CAP、BASE理论
CAP理论 2000年7月,Eric Brewer教授提出CAP猜想:2年后,Seth Gilbert和Nancy Lynch从理论上证明了CAP:之后,CAP理论正式成为分布式计算领域的公认定理. ...
- 分布式系统原理之cap理论
1.1 CAP理论的含义 Cap理论表示在分布式系统中一致性(C).可用性(A)和分区容错性(P)最多只能同时满足两个. 一致性:客户端更新数据成功后,在任意时刻,在系统任意对外提供服务的节点,读取 ...
- [转]10分钟了解分布式CAP、BASE理论
原文: https://www.cnblogs.com/chengtian/p/11278072.html ---------------------------------------------- ...
- 分布式系统之CAP理论杂记[转]
分布式系统之CAP理论杂记 http://www.cnblogs.com/highriver/archive/2011/09/15/2176833.html 分布式系统的CAP理论: 理论首先把分布式 ...
- CAP原理、一致性模型、BASE理论和ACID特性
CAP原理 在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 一致性(Con ...
随机推荐
- 灵活配置tomcat根目录网站
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDepl ...
- oracle自增主键
本文参考-https://www.cnblogs.com/xxaxx/p/3584036.html oracle没有像sqlserver中identity一样的函数,需要依赖于序列.触发器来实现自增主 ...
- HelloCube:ForEach
此示例演示了一个简单的ECS系统,它可以旋转一对立方体. 它显示了什么? 此示例演示了ECS中数据和功能的分离.数据存储在组件中,如下RadiansPerSecond属性存储在RotationSpee ...
- logstash输出至elasticsearch
续上一篇 上一篇描述了通过logback配置用logstash收集springmvc项目日志,本文是描述如何进一步通过elasticsearch对所收集数据进行的分析. output { elasti ...
- 分布式消息通信之RabbitMQ Tutorials
目录 官网 1 Hello World! 1.1 生产者demo producer 1.2 消费者demo consumer 1.3 查看queue队列中的信息 页面查看,可看到有4条消息 命令查看 ...
- MATLAB符号求解极限积分微分级数2
一.符号表达式的极限 limit(F,x,a):求当时,符号表达式F的极限. limit(F,a):符号表达式F采用默认自变量(可由函数findsym求得),该函数求F的自变量趋于a时的极限值. li ...
- 【并行计算与CUDA开发】英伟达硬件加速编解码
硬件加速 并行计算 OpenCL OpenCL API VS SDK 英伟达硬件编解码方案 基于 OpenCL 的 API 自己写一个编解码器 使用 SDK 中的编解码接口 使用编码器对于 OpenC ...
- hdoj3534(树形dp,求树的直径的条数)
题目链接:https://vjudge.net/problem/HDU-3534 题意:给出一棵树,求树上最长距离(直径),以及这样的距离的条数. 思路:如果只求直径,用两次dfs即可.但是现在要求最 ...
- SQL SERVER MONTH函数
定义: MONTH函数返回指定日期的月的部分 语法: MONTH(date) 参数: ①date参数是合法的日期表达式. 返回值: int型数据 例: 声明:本文是本人查阅网上及书籍等各种资料,再加 ...
- IDEA插件之JProfiler
1.是什么?来用干嘛的? 一个商业授权的Java剖析工具. 用来剖析程序内存.CPU使用情况,找到性能瓶颈,快速定位问题所在. 2.IDEA安装JProfiler插件 (1)File -> Se ...