Linux下几种并发服务器的实现模式(详解)
作者:`leisure 发布时间:2022-03-10 13:48:06
1>单线程或者单进程
相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个client
不存在并发。
2>循环服务器和并发服务器
1.循环服务器:一个server只能一次只能接收一个client,当当前client结束访问之后才能进行下一个client的连接。
2.并发服务器:一个server同一时间可以响应很多客户端的访问。
3>select+多线程模式
并发服务器的三种实现方式
1.多进程并发服务器
是指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。
来源:https://www.cnblogs.com/chenyang920/p/5469121.html
猜你喜欢
- 8.使用安全密码一个好的密码对于一个网络是非常重要的,但是它是最容易被忽略的。前面的所说的也许已经可以说明这一点了。一些公司的管理员创建帐号
- 相信很多用phpcms v9的站长都不是程序员,而我也是一个网页设计师,所以对制作模板还是可以对付的。但是一设计到自己写程序,就一个头两个大
- 我以前一直是先款交易pp,也从没收到未授权的pp,遇到未授权的pp或买家恶意投诉的pp轻者撤资并且承担手续费(高级)重者帐户被限制或被解除业
- 怎么删除docker里建立的容器1、首先使用docker -s -a命令列出所有容器# docker ps -aCONTAINER ID &
- 有时需要远程控制ubuntu系统的电脑,Teamviewer在linux下也可以进行安装,大致看了下向日葵在linux下配置好像比较麻烦,而
- Grep的多次管道过滤问题在日常的开发过程中,我们利用grep可以方便快捷的查找感兴趣的日志内容,极大地提升了开发和排错效率。但是有时候,我
- 做网络好几年了.对中国站长(特别是那些象我一样以网络为生的站长)的生活真的是有自己的体验.我从00年开始在网络上小打小闹,到后来毕业后跟朋友
- dedecms默认在列表是无法调用tag标签的,经过各位版主们的帮助,现给大家提供出种方法方法1:在列表需要的位置加入下列代码[field:
- 本文介绍的是如何安装ubuntu下C++接口的opencv1.安装准备:1.1安装cmakesudo apt-get install cma
- 做网站的人都有一个习惯。都喜欢最求PR、alexa、site。且不管这些东西是否有用?是否可以带来直接盈利?那么多站长朋友追求,我想还是有他
- 1. pv 命令有时候我们在电影屏幕上看到一些字幕一个个匀速显示出来,像有人在边敲键盘,边显示一样。Linux上的pv命令可以实现这种效果。
- 近日由于虚拟机下安装软件过多,时不时弹出磁盘空间不足的问题。查找了很多资料,都没有很好的解决办法。朋友发来一个链接,还是老外有良心。翻译出来
- 穷不仅仅是生活,还是思想。。。一个人的一生最可怕的莫过于思想的贫穷。为什么我们会穷,所以我们才去思考,去变通。07是网络悲哀的一年,人性的贪
- 一.错误表现 IIS5的HTTP 500内部服务器错误是我们经常碰到的错误之一,它的主要错误表现就是ASP程序不能浏览但HTM静态网页不受影
- 注:本文的邮件服务器只用于发送邮件,也就是STMP服务器。一、准备工作1. 为邮件服务器添加DNS解析虽然不加DNS解析也能把邮件发出去,但
- Linux中多线程详解及简单实例1.概念 进程:运行中的程序。 线程:一个程序中的多个执行路径。更准确的定义是:线程是一个进程内部的一个控制
- 以下是我的iptables设置 *filter:INPUT DROP [0:0]:FORWARD ACCEPT [0:0]:OUT
- 下午15时左右,百度再次改版百度指数(index.baidu.com)功能和布局。新布局更加直观,便于查看相关检索词数据与相关新闻内容。此外
- 第一次修正版的威客模式成熟公式为:W=(B+C+M)×CR W (witkey)
- docker使用1. docker ps 查看运行中的容器2. docker images 查看docker镜像3. docker rm i