常见的Linux并发服务器模型有:多进程并发服务器、多线程并发服务器、select多路I/O转接模型、poll多路I/O转接模型、epoll多路I/O转接模型。 1、多进程并发服务器、多线程并发服务器 多进程并发服务器考虑因素: 父进程最大文件描述符个数(父进程中需要close关闭accept返回的 ...
分类:
其他好文 时间:
2017-11-05 20:01:16
阅读次数:
201
首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。 不管是文件,还是套接字,还是管道,我们都可以把他们看作流。 之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数 ...
分类:
其他好文 时间:
2017-11-03 14:15:20
阅读次数:
145
由于经常被抓取文章内容,在此附上博客文章网址:,偶尔会更新某些出错的数据或文字,建议到我博客地址 : --> 点击这里 1 单进程服务器 - 非堵塞模式 服务端 : 客户端: 我们可以看到,关键点在于for循环每个保存下来的套接字,循环请求是否有数据发来,由于速度很快,导致看起来像是多进程处理一样。 ...
分类:
编程语言 时间:
2017-11-02 11:25:17
阅读次数:
142
IO多路复用(select、poll、epoll)介绍及实现 IO多路复用中包括 select、pool、epoll,这些都属于同步,还不属于异步 一、IO多路复用介绍 1、select select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组, ...
分类:
编程语言 时间:
2017-10-30 23:57:44
阅读次数:
487
红黑树是高效查找和插入删除的数据结构,用途很广泛,如epoll的消息注册机制,stl中的map都采用了红黑树。## 红黑树的主要特性:`(1)每个节点或者是黑色,或者是红色。``(2)根节点是黑色。``(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空的叶子节点!]``(4)如果一 ...
分类:
其他好文 时间:
2017-10-30 18:25:45
阅读次数:
168
一、简要分析 一个socket对应一个数据流,通过I/O操作中的read从流中读入数据,write向流中写入数据。当read时,socket流中没有数据的话,read阻塞,线程睡眠,CPU开始做其他的任务,流中有数据可读时,read返回。 在阻塞IO模式下,一个线程只能处理一个IO事件。如果处理多个 ...
分类:
其他好文 时间:
2017-10-29 17:33:50
阅读次数:
239
boost::io_service解读 asio是boost提供的一个c++异步编程模型库,其核心类io_service,在多线程编程里面提供了任务队列和任务分发功能,在socket、io编程里主要作为一个事件驱动器(完成端口、select、poll、epoll等)。 队列模型 每个io_servi ...
分类:
其他好文 时间:
2017-10-28 12:55:57
阅读次数:
165
什么是I/O多路复用 I/O多路复用就是通过一种机制,可以监视多个描述符,一旦某个IO能够读写,通知程序进行相应的读写操作。 I/O多路复用的场合 1、当客户处理多个描述字时(通常是交互式输入和网络套接字),必须使用I/O复用 2、如果一个TCP服务器既要处理监听套接字,又要处理已连接套接字,一般也 ...
分类:
其他好文 时间:
2017-10-25 17:11:48
阅读次数:
175
httpd MPM(多路处理模块): prefork:进程模型,两级结构,主进程master负责生成 子进程,每个子进程负责响应一个请求 worker:线程模型,三级结构,主进程master负责生成子 进程,每个子进程负责生成多个线程,每个线程响应一个 请求 event:主进程master负责生成子 ...
分类:
其他好文 时间:
2017-10-25 15:22:55
阅读次数:
292
回想起之前自己用纯c手动写epoll循环,libevent用起来还真是很快捷啊!重写了之前学习的时候的一个例子,分别用纯c与libevent来实现。嗯,为了方便对比一下,就一个文件写到黑了。 纯c版: 一个server.c与client.c共同引用的头文件func.h 1 #include<stdi ...
分类:
其他好文 时间:
2017-10-24 00:17:55
阅读次数:
294