多路复用I/O 它的基本原理就是select/epoll这个function会不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程。 流程图如下: 当用户进程调用了select,那么整个进程会被block,而同时,kernel会“监视”所有select负责的socket ...
分类:
其他好文 时间:
2018-07-18 21:47:33
阅读次数:
226
在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在大数据、高并发、集群等一些名词唱得火热之年代,select和poll的用武之地越来越有限,风头已经被epoll占尽。 select()和poll() IO多路复用模型 s ...
分类:
其他好文 时间:
2018-07-17 12:41:36
阅读次数:
160
以下是IO的一个基本过程 先理解一下用户空间和内核空间,系统为了保护内核数据,会将寻址空间分为用户空间和内核空间,32位机器为例,高1G字节作为内核空间,低3G字节作为用户空间。当用户程序读取数据的时候,会经历两个过程:磁盘到内核空间(这块消耗性能,下面简称内核数据准备),内核空间拷贝到用户空间(下 ...
分类:
其他好文 时间:
2018-07-15 11:16:04
阅读次数:
125
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO ...
分类:
其他好文 时间:
2018-07-14 10:23:22
阅读次数:
264
多路复用IO(IO multiplexing) O multiplexing这个词可能有点陌生,但是如果我说select/epoll,大概就都能明白了。有些地方也称这种IO方式为事件驱动IO (event driven IO)。我们都知道,select/epoll的好处就在于单个process就可以 ...
分类:
编程语言 时间:
2018-07-13 01:15:55
阅读次数:
159
我们了解了socket之后已经知道,普通套接字实现的服务端的缺陷:一次只能服务一个客户端! 并且,为了使一个客户端能够不断收发消息,我们还要使用while循环来轮询,这极大地降低了我们的效率 accept阻塞! 在没有新的套接字来之前,不能处理已经建立连接的套接字的请求 recv 阻塞! 在没有接受 ...
分类:
其他好文 时间:
2018-07-12 21:44:58
阅读次数:
191
高性能爬虫方案: 多进程 多线程 利用“异步非阻塞”模块实现单线程并发请求。 本质 IO多路复用: 监听多个socket是否发生变化 IO多路复用的作用: 1.select,内部循环检测socket是否发生变化;最多只能检测1024个socket 2.poll,内部循环检测socket是否发生变化; ...
分类:
编程语言 时间:
2018-07-12 20:47:50
阅读次数:
180
pythonnet 网络4 select 支持水平触发 poll 支持水平触发 epoll epoll 也是一种IO多路复用的方式,效率比select和poll 要高一点; epoll 不仅支持水平触发也支持边缘触发; 循环服务器模型; 并发服务器模型; IO多路复用模型; 协程服务器模型; ### ...
分类:
编程语言 时间:
2018-07-07 20:16:40
阅读次数:
155
1、非阻塞套接字 第一部分 基本IO模型 一次只能服务一个客户端! accept阻塞! 在没有新的套接字来之前,不能处理已经建立连接的套接字的请求。 recv 阻塞! 在没有接受到客户端请求数据之前, 不能与其他客户端建立连接! 第二部分 非阻塞套接字 connect操作一定会引发BlockingI ...
分类:
其他好文 时间:
2018-07-07 00:21:18
阅读次数:
234
I/O 多路复用是通过一种机制使一个进程能同时等待多个文件描述符(fd),而这些文件描述符(套接字描述符)其中的任意一个进入读就绪状态,epoll()函数就可以返回。 所以, IO多路复用,本质上不会有并发的功能,因为任何时候还是只有一个进程或线程进行工作,它之所以能提高效率是因为select\ep ...
分类:
其他好文 时间:
2018-07-06 11:38:02
阅读次数:
155