文档章节

常见多线程并发服务器编程模型

Corlang
 Corlang
发布于 2016/05/05 15:57
字数 695
阅读 186
收藏 8

一、基础知识

1、一个主机的端口号为所有进程所共享,但普通用户进程绑定不了一些特殊端口号如20、80等。

2、每个进程都有自己的文件描述符(包括file fd, socket fd, timer fd, event fd, signal fd),一般是1024,可以通过ulimit -n 设置,但所有进程打开的文件描述符总数有上限,跟主机的内存有关。

3、一个进程内的所有线程共享进程的文件描述符。

二、常见并发服务器方案:

1、循环式/迭代式( iterative )服务器 无法充分利用多核CPU,不适合执行时间较长的服务,即适用于短连接。如果是长连接则需要在read/write之间循环,那么只能服务一个客户端。

输入图片说明

2、并发式(concurrent)服务器 one connection per process/one connection per thread 适合执行时间比较长的服务

输入图片说明

one connection per process : 主进程每次fork 之后要关闭connfd,子进程要关闭listenfd one connection per thread : 主线程每次accept 回来就创建一个子线程服务,由于线程共享文件描述符,故不用关闭。

3、prefork or pre threaded(UNP2e 第27章)(容易发生“惊群”现象,即多个子进程都处于accept状态)

输入图片说明

4、反应式( reactive )服务器 (reactor模式)(select/poll/epoll) 并发处理多个请求,实际上是在一个线程中完成。无法充分利用多核CPU 不适合执行时间比较长的服务,所以为了让客户感觉是在“并发”处理而不是“循环”处理,每个请求必须在相对较短时间内执行。

输入图片说明

5、reactor + thread per request(过渡方案)

6、reactor + worker thread(过渡方案)

7、reactor + thread pool(能适应密集计算)

输入图片说明

8、multiple reactors(能适应更大的突发I/O) reactors in threads(one loop per thread) reactors in processes 一般来说一个subReactor适用于一个千兆网口

输入图片说明

9、multiple reactors + thread pool(one loop per thread + threadpool)(突发I/O与密集计算) subReactor可以有多个,但threadpool只有一个。

输入图片说明

10、proactor服务器(proactor模式,基于异步I/O) 理论上proactor比reactor效率要高一些 异步I/O能够让I/O操作与计算重叠。充分利用DMA特性。 Linux异步IO glibc aio(aio_),有bug kernel native aio(io_),也不完美。目前仅支持 O_DIRECT 方式来对磁盘读写,跳过系统缓存。要自已实现缓存,难度不小。 boost asio实现的proactor,实际上不是真正意义上的异步I/O,底层是用epoll来实现的,模拟异步I/O的。

输入图片说明

11、常见并发服务器方案比较

输入图片说明

本文转载自:http://blog.csdn.net/yusiguyuan/article/details/17591613

Corlang
粉丝 6
博文 35
码字总数 6634
作品 0
南京
程序员
私信 提问
Linux多线程并发服务器编程(线程池,FTP服务器)

分享网盘下载:https://pan.baidu.com/s/1gfNCcXt 密码: irfk 内容简介 本课程从最基础的进程、线程概念讲起逐步深入,通过理论与实践结合的方式,使学员快说掌握linux多线程网络编程技术,并...

人气王子333
2018/06/26
0
0
服务器模型——从单线程阻塞到多线程非阻塞(上)

前言的前言 服务器模型涉及到线程模式和IO模式,搞清楚这些就能针对各种场景有的放矢。该系列分成三部分: 单线程/多线程阻塞I/O模型 单线程非阻塞I/O模型 多线程非阻塞I/O模型,Reactor及其...

2017/12/21
0
0
成都 某知名游戏平台背景游戏公司 招聘 java主程

Java后端主程(1名) 15-20W 作息时间:9:00-18:00能接受加班 职责描述: 负责网页游戏的服务器端架构和开发工作。 职位要求: 1、精通Java技术(J2SE的数据结构,多线程,事件机制),具有扎实...

Seliya
2012/04/16
2.6K
15
Java并发编程面试必备的知识点!

相信不用我说,大家也都知道掌握并发编程对于一个 Java 程序员的重要性。但相对于其他 Java 基础知识点来说,并发编程更加抽象,涉及到的知识点很多很零散,实际使用也更加麻烦。以至于很多人...

架构师技术联盟
03/05
0
0
Perl 多进程技术在自动化测试中的应用

在 IT 产品系统测试的自动化项目中,经常有并行处理多个子任务的需求,为了提高测试效率,就需要用到多进程或者多线程编程。文章介绍了 Perl 多进程的用法和适用场景,以及 Perl 多进程和多线...

红薯
2009/12/02
933
0

没有更多内容

加载失败,请刷新页面

加载更多

js如何控制table中的某一行动态置顶

两行代码搞定: $('#'+item.roadCode).fadeOut().fadeIn();//获取到需要置顶的行 $(".table").prepend($('#'+item.roadCode)); 其中,fadeOut()方法 作用 --- 从可见到隐藏 如下: prepend(......

码妞
今天
4
0
四种解决Nginx出现403 forbidden 报错的方法

我是在在本地用虚拟机中通过yum安装nginx的,安装一切正常,但是访问时报403, 于是查看nginx日志,路径为/var/log/nginx/error.log。打开日志发现报错Permission denied,详细报错如下: 1....

dragon_tech
今天
3
0
获取RestResultResponse返回的值

Springboot项目,需要调其他服务的接口,返回值类型是RestResultResponse 打断点的结果集是这个 打印出来的getData(): [{id=3336b624-8474-4dd9-bd5b-c7358687c877, paraNo=104, para=Postpo...

栾小糖
今天
4
0
【小学】 生成10以内的加减法

#!/usr/bin/env python# coding: utf-8from random import randrange# 题目的最大数值R_MAX = 10# 生成的题目的数量R_PAGE = 70# 生成减法列表def get_sub_list():...

Tensor丨思悟
今天
11
0
JavaScript设计模式——适配器模式

  适配器模式是设计模式行为型模式中的一种模式;   定义:   适配器用来解决两个已有接口之间不匹配的问题,它并不需要考虑接口是如何实现,也不用考虑将来该如何修改;适配器不需要修...

有梦想的咸鱼前端
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部