高并发服务器开源项目,高并发服务器框架详解 - osc_qgfjs4a5的个人空间 - OSCHINA - 中文开源技术交流社区...

1)如何设计如何扩展

2)什么是高并发

(1)任务:完成某个功能的一个一个目标任务,服务器程序也是不例外的。

(2)CPU核心:完成具体任务的,是CPU核心 + 周围的外设(读写磁盘IO、网络IO) + 内存

(3)每个CPU核心可以同时调度不同的任务,如:I7双核:同时调度2个可以调度的任务;

提升单个核心主频(摩尔定律) + CPU的数目(不同核心处理不同的任务),从而处理性能;

服务器专门用的机器:32多个核心,同时调度32个不同的任务 “同时执行”;

OS-->分配核心--》调度可以被调度的任务(线程),一个线程--》任务--》OS会分配核心去调度执行它。

我们有几个核心,你就可以调度多个线程

(4)高并发:

处理一个任务,一个核心,我们需要0.3s。 假如,双核,1s可以处理多少个业务呢?

并发数量:1个CPU核心处理一个任务需要0.25s,那么一个核心可以处理4个任务;4个任务*2 = 8个任务, 1s可以并发8个任务。

例子1:但是有时候,我们无法接近个任务,什么情况下我们无法做到8个任务呢:

如果我们把这些任务放到了一个OS可以调度的线程里面:

main(){

while(网络事件){

...// 1s只能处理4个任务,这个代码永远只有1个核心来处理这个任务。--》1s最多是处理4个任务。

}

}

同样的硬件,不同的代码,写出来的服务器的处理能力就不一样。由于我们的设计没有做到--》50%的CPU在休息。

结论: 我们要使用多线程 or 多进程,增加我们的os可调度的单元,能发挥我们的多核的优势。

例子2:处理一个IO的任务,CPU把内存的数据--》磁盘驱动--》磁盘IC数据持久化到我们的磁盘--》数据就存到这个磁盘了;

WriteFile("内存数据", 文件)--》CPU--》内存数据--》磁盘的驱动(比较快0.001s完成)--》等待磁盘IC控制磁头,将内存的

数据持久化到硬盘上。

假设WriteFile需要0.25s,CPU是0.001s干完,其余0.249s就无事可干。

假设我们的CPU是一个核心,任务WriteFile 0.25 = 0.001 + 0.249(等待磁盘处理的时间),CPU的实际工作只有0.001s,

CPU 0.249s可以做其它事情,我们的代码等在了IO上面。

我们并发的业务: 1/0.25s = 4次,CPU都是等待,我们本来可以让CPU做其它事情,但是你让它等待了。

不让它等待:

(1)加多线程、多进程,OS调度CPU核心做其它的任务--》提供了业务并发。

(2)采用异步:不傻等WriteFile完成,而是提交完0.001s,马上返回去做别的。磁盘你去存就可以了。

异步也是增加了线程。 和多线程本质并没有其它的区别。

结论:当我们等待外部设备处理完成后,才能继续下一个任务的时候,我们要提供更多的调度单元,让OS去调度CPU去完成其它任务。

就跟快递员一样,不用傻等,而是去给其它人去派送。

我们就可以多个线程,不要让CPU没有任务可做。

代码问题、、、等待外设。。。这2个例子。

(5)一定不要傻等在一个任务上,你要做一个可以调度的单元,让OS去调度其它任务--》并发:

10个快递--》0.25   0.001--》0.249

0.001-->A

0.001-->B

0.001-->C

0.001-->D

0.001-->E

0.001-->F

...

0.001-->10人-->0.001s

那么:0.01 + 0.249--》0.259s就可以完成调度。 而1个一个的派送,则需要2.5s

(6)安排足够的任务(线程)--》给足够的核心去调度。

32核心: 就安排了6个核心去调度,那么大部分核心都在睡觉。

(7)增加调度单元:

多线程调度:根据核心数目,来运行我们的代码,16核心和32核心,是一样的。

多进程来部署:让不同的东西部署到不同的进程上。

3)服务器多线程架构

多线程去处理网络请求, 成千上万个客户端。

哪个线程去处理哪个事件。

别再派送一个快递的时候,别的快递都傻等到这里了。有核心,没有任务。

4)多台服务器,如何部署

(1)内部快展

地图A

地图B

...

地图副本服务器

假设只能买到4核心,

代码不用变。按照逻辑功能,划分到不同的分区。

机器1:通用服务

机器2:地图1服务

机器3:地图2服务

返回对应的连接。 让不同的机器跑不同的任务。

分区调度器--》单服。  足够多的任务可以被OS调度到。 客户端连接的不同的地址的服务器而已。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值