Linux高性能服务器第八章总结

如书中开头所说,这章是承上启下的一章,很多东西开始看的时候不知道是什么,后面看着看着还是需要回来复习复习。

本章主要分为两个大类:1.I/O处理 2.逻辑处理

I/O里又分为两个模块,分别是四种I/O模型和两种事件处理模型

四种I/O模型分别是:1.阻塞I/O 2.I/O复用 3.信号I/O 4.异步I/O

阻塞I/O就是在读写数据时主线程会遭到阻塞,这样就没法处理多个客户端的I/O事件,因为每一个都要阻塞。I/O复用相较于阻塞I/O虽然也会遭到阻塞,但是可以同时监听多个I/O事件。I/O复用通过向内核事件表中注册事件,主线程阻塞进行监听,事件发生时内核会通知主线程有线程到达。信号I/O和异步I/O不太熟。
同步和异步的区别就是什么时候通知线程,同步是当事件就绪时通知线程读取并处理,而异步是数据已经读取到指定的地方了,通知线程可以直接使用了。
I/O复用是之后几章中常用的操作,主要是对监听事件表中的事件统一监听,而不是单独监听某个具体事件。

事件有三种类型:I/O,信号,定时器。主要是事件不同于固定的代码,我们不知道事件何时发生。就像老师说到时候喊你了你去办公室找我,但是不知道具体几点喊你,如果你一直等他(阻塞),那么什么也干不了(CPU)。但是你现在可以登录个qq,如果老师给你发信息喊你了就会发出声音,那么你在此期间可以做自己的事情,当有消息的时候你再去找老师处理事情即可。

主要有两种事件处理模式:Reactor和Proactor。(以及用reactor模拟proactor)

reactor大致流程如下:主线程或工作线程向内核事件表注册事件,主线程对事件进行监听,当事件就绪时,主线程就插入请求队列,唤醒工作线程进行工作。这里的请求队列可能就类似于打电话,事件发生就相当于需要有人干活了,就要一个一个的打电话找人干活。

Proactor不同于Reactor,Proactor是向内核注册完成事件,因此还需要告诉内核数据存放在哪,以及工作完成后通知谁进行处理或善后。现在假如你是领导,需要找人干活,需要一个人去写本子,一个人去跑腿取外卖,现在找了一个助理,你告诉他需要写本子和取外卖,他就把材料收集好放到需要写本子的人的办公室,告诉他写本子,并把外卖送进你的办公室,通知你吃外卖。

可以使用Reactor模拟Proactor。Reactor和Proactor的本质区别是通知事件就绪还是事件完成。因此模拟的Proactor就是使用线程注册完事件后,当需要读写数据时,主线程去读写,并将封装好的数据发送给工作进程进行处理,这样对于工作进程来说,注册的就是完成事件。当工作线程被唤醒时只需要处理数据即可。

接下来是逻辑处理部分。主要是两部分:1.两种高效的并发模式 2.一种高效的有限状态机

并发模式有两种:一种是半同步/半异步模式,一种是领导者/追随者模式。后者我也没看太懂,就不进行阐述了。

关于同步和异步,这里是指程序代码按顺序执行还是由事件驱动执行。因为同步的程序执行简单,但是异步的程序执行效率较高,因此综合使用更好。对于I/O的处理,对事件监听就采用异步效率更高,而对于工作线程,就采用同步,逻辑更为简单。

在这里插入图片描述

半同步/半异步有种半同步/半异步堆模型。这种模型主线程监听连接套接字,随后将连接套接字分发给工作线程。当请求队列有事件时,工作线程就被唤醒去竞争。这种模型有两个缺点:1.主线程和工作线程共享请求队列,使用时需要堆请求队列耗费资源加锁,资源开销过大 2.每个工作线程同一时间只能处理一个客户请求(这点我有点迷,下面的不也是一次一个么?)

在这里插入图片描述
这种是高效的半同步/半异步模型,主线程直接对工作线程分发连接套接字,工作线程被主线程唤醒工作,这样不需要竞争请求队列了。

对于有限状态机,感觉很牛逼,通过将不同的类型封装为状态进行转移。但是掌握还不够透彻,不知道封装哪些状态。

最后是提高性能的三个建议:
1.使用池,池可以空间换时间,这样不需要每次创建一个线程或者别的,减少了创建的开销。但是如何分配以及如何使用,还有使用完如何恢复状态还不太熟悉。
2.数据复制,尽量使用零拷贝,减少内核和用户空间的数据拷贝
3.锁,尽量少用锁,或者用轻量级锁,锁需要耗费大量资源。

有错误欢迎大家指出,或者帮忙解答疑问,一起进步!

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值