网站建设功能说明书,深圳福田区住房和建设局网站官网,东莞微网站建设多少钱,找工作求职一、I/O多路复用I/O的含义#xff1a;在计算机领域常说的IO包括磁盘IO和网络IO#xff0c;我们所说的IO复用主要是指网络IO#xff1b;在Linux中一切皆文件#xff0c;因此网络IO也经常用文件描述符FD来表示。复用的含义#xff1a;在通信领域中为了充分利用网络连接的物理…一、I/O多路复用I/O的含义在计算机领域常说的IO包括磁盘IO和网络IO我们所说的IO复用主要是指网络IO在Linux中一切皆文件因此网络IO也经常用文件描述符FD来表示。复用的含义在通信领域中为了充分利用网络连接的物理介质往往在同一条网络链路上采用时分复用或频分复用的技术使其在同一链路上传输多路信号即公用某个“介质”来尽可能多的做同一类(性质)的事在网络场景中复用的“介质”就是任务处理线程所以简单理解就是多个IO共用1个线程。I/O复用的好处在传统意义上对于多线程并发的处理方式是服务端监听客户端请求也就是I/O流每有一个I/O流进来程序就创建一个线程处理这个I/O流假设现在有一百万个I/O流进来那就需要开启一百万个线程一一对应处理这些I/O流这样CPU占有率很高而且这些I/O流可能大部分时间只是连接着没有实际的数据读写这也造成系统资源的浪费所以人们提出了I/O多路复用这个模型一个线程通过记录I/O流的状态来同时管理多个I/O可以提高服务器的吞吐能力。因此就可以利用一个函数(select和poll)来监听I/O所需的这些数据的状态一旦I/O有数据可以进行读写了进程(也可以说是线程)就来对这样的IO进行服务。selectpollepoll都是IO多路复用的机制I/O多路复用就是通过一种机制让单个进程可以监视多个文件描述符一旦某个描述符就绪(一般是读就绪或者写就绪)能够通知应用程序进行相应的读写操作。但selectpollepoll本质上都是同步I/O因为他们都需要在读写事件就绪后自己负责进行读写也就是说这个读写过程是阻塞的而异步I/O则无需自己负责进行读写异步I/O的实现会负责把数据从内核拷贝到用户空间。二、Python selectPython的select()方法直接调用操作系统的IO接口它监控sockets,open files, and pipes(所有带fileno()方法的文件句柄)何时变成readable 和writeable, 或者通信错误select()使得同时监控多个连接变的简单并且这比写一个长循环来等待和监控多客户端连接要高效因为select直接通过操作系统提供的C的网络接口进行操作而不是通过Python的解释器。select()方法接收并监控3个通信列表 第一个是所有的输入的data即外部发过来的数据第2个是所有要发出去的data第3个监控错误信息。需要创建2个包含输入和输出信息列表来传给select()列表里是服务端和客户端socket对象。程序的主循环调用select()时会阻塞和等待直到新的连接和数据进来。当你把inputs,outputs,exceptional(这里跟inputs共用)传给select()后它返回3个新的list我们上面将他们分别赋值为readable,writable,exceptional, 所有在readable list中的socket连接代表有数据可接收(recv)所有在writable list中的存放着你可以对其进行发送(send)操作的socket连接当连接通信出现error时会把error写到exceptional列表中。原文https://www.cnblogs.com/zlw-xyz/p/12950535.html