2019.09
1
概述
随着互联网
尧
移动互联网
尧
物联网的发展
袁
越来越
多的网站
尧
应用
尧
智能芯片等连接在一起给人们提供各
类服务
袁
而为了提高更快更好更便宜的服务
袁
需要有更
快的服务开发速度和服务提供能力
袁
为了满足这两个目
标
袁
希望选择合适的开发语言和服务编程框架
袁
将针对
这两个方面重点进行研究
遥
根据
TIOBE
2019
年
02
月的最新语言排行榜
袁
排前
3
的是
Java袁
C袁
Python袁
其中
Python
以快速的开发能
力和与其他语言的良好嵌入性
袁
使它成为首选
遥
如图
1
所示
遥
在服务器并发编程中
袁
需要了解哪些因素会影响到
服务能力
袁
针对这些因素进行优化或规避
袁
从而提高服
务能力
袁
排除硬件因素外
袁
常见的有如下因素会影响并
发效率
院
用户空间和内核空间数据交换
曰
缓存大小
曰
进程
/
线程切换
曰
进程
/
线程
IO
阻塞
曰
文件描述符数量
渊
文件句柄
冤遥
一般情况下
袁
进行网络通信
袁
在服务器端通常需要
进行用户空间和内核空间进行数据交换
袁
以此达到数据
收发的目的
袁
而交换数据空间大小为即缓存大小
袁
为了
提高服务器并发
袁
通常会采用多进程或多线程并发
袁
过
多的进程
尧
线程数将增加切换开销
袁
如处理不当会造成
服务的惊群效应
袁
如进程
尧
线程数量过少
袁
将降低并发
能力
袁
所以合理的进程
/
线程数是服务设计和测试的一
个要点
遥
在服务进程或线程内
袁
IO
是阻塞还是复用
袁
会极大地影响服务的并发能力
遥
一个进程可以打开的文
件描述符
渊
一个
Socket
句柄对应一个文件描述符
冤
数量
也会制约服务的并发能力
袁
在早期的
UNIX
系统中
袁
一
个进程通常限制最大打开
1024
个文件句柄
遥
针对上述
这些因素的优化
袁
在
Liunx
下
袁
常见有
5
种并发编程模
型来提供并发服务能力
院
阻塞
IO
模型
曰
非阻塞
IO
模型
曰
IO
复用
曰
信号驱动
IO曰
异步
IO遥
下面进行一一介绍
遥
2
网络编程框架
在介绍上述
5
种并发模型前
袁
需要先介绍
Linux
的
IO
通信模型和
Socket
阻塞
尧
同步通信的概念
遥
IO
通信模型
院
Linux
IO
通信的本质是
Socket
的访
问
渊
读写
冤袁
通常分为
2
个阶段
袁
以
Socket
读取为例
袁
数据会先被拷贝到内核的缓冲区中
渊
没有数据到达则等
待
冤袁
然后再从内核的缓冲区拷贝到应用程序的空间
遥
对于写操作类似
袁
只不过次序相反
遥
Socket
阻塞
尧
同步通信
院
简单的说
袁
阻塞和同步是
2
个概念
袁
阻塞针对的对象是
Socket袁
而同步针对的是
作者简介:
林存燕
渊1987-冤袁
女
袁
本科
袁
讲师
袁
研究
方向
院
计算机应用技术
遥
收稿日期: