Linux下的几种并发服务器的设计模式linux
1>单线程或者单进程设计模式
至关于短连接,当accept以后,就开始数据的接收和数据的发送,不接受新的链接,即一个server,一个client服务器
不存在并发。多线程
2>循环服务器和并发服务器并发
1.循环服务器:一个server只能一次只能接收一个client,当当前client结束访问以后才能进行下一个client的链接。socket
2.并发服务器:一个server同一时间能够响应不少客户端的访问。函数
3>select+多线程模式线程
并发服务器的三种实现方式设计
1.多进程并发服务器server
是指TCP链接后,每个客户机的请求并不禁服务器直接处理,而是由服务器建立一个子进程来处理
2.多线程并发服务器
多进程服务器是对多进程的服务器的改进,因为多进程服务器在建立进程时要消耗较大的系统资源,因此用线程来取代进程,这样服务处理程序能够较快的建立。据统计,建立线程于建立进程要快10100倍,因此又把线程称为“轻量级”进程。进程与进程不一样的是:一个进程内全部线程共享相同的全局内存,全局变量等信息。
是指TCP链接后,每个客户机的请求并不禁服务器直接处理,而是由服务器创
3.多路复用I/O
I/O是为了解决线程/进程阻塞在那个I/O调用中,经常使用select或者pool
4>epoll
在linux2.6以后有的epoll,实用的方法是:用一个线程专门进行端口的监听,accept接收到链接的时候,把链接设置成非阻塞方式,把epoll时间设置成边缘触发方式,加入epoll管理。接收线程阻塞在epoll的等待事件函数。另一个线程专门用于数据发送。
注意:
1.若是把epoll设置成水平触发效率就降低采用select的水平。
2.Unix系统下有单个进程打开的描述符的限制,还有系统内打开的描述符的数目限制。系统内打开的描述符数目限制由软硬连接限制两个。硬链接是根据机器的配置而不一样。软链接限制能够修改可是必须小于硬限制。
应用:
Linux下大规模的TCP并发。
当前并发还有其它的方式。好比线程池。进程池等,每种模式都有他的优缺点,若是大规模的并发,采用epoll会更好。
epoll的时间设置有边缘触发方式和水平触发方式
1.水平触发方式:
若是文件描述符已经就绪能够非阻塞的执行IO操做了,此时会触发通知。容许在任意时候重复检测IO的状态,没有必要每次描述符就绪后尽量多的执行IO,select,poll就属于水平触发事件。
只要知足要求就触发一个事件。
2.边缘触发方式:
若是文件描述符自上次状态改变后有新的IO活动到来,此时会触发通知。在收到一个IO事件通知尽量多的执行IO操做,由于若是再一次通知中没有执行完IO那么就须要等到下一次新的IO活动到来才能获取就绪的描述符。信号驱动式IO就属于边缘触发。
每当状态改变就触发一个事件。
eg:如今有一个1000个字节的报文,不管是水平触发仍是边缘触发,都会发送一个只读通知,当收到了100个字节后,水平触发由于还有字节没有读完,就会发送一个只读通知,可是边缘触发会一直保持等待的通知,等待接下来的报文的到来,直到边缘触发返回EWOULDBLOCK就摒弃这个socket。