自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 Linux高性能服务器编程9-3ET和LT模式区别

LT(水平模式):事件如果没有被处理完会多次触发。ET(边沿模式):事件只会触发一次。可以看到,ET只触发了一次。

2024-01-25 09:50:19 340

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

现在假如你是领导,需要找人干活,需要一个人去写本子,一个人去跑腿取外卖,现在找了一个助理,你告诉他需要写本子和取外卖,他就把材料收集好放到需要写本子的人的办公室,告诉他写本子,并把外卖送进你的办公室,通知你吃外卖。因此模拟的Proactor就是使用线程注册完事件后,当需要读写数据时,主线程去读写,并将封装好的数据发送给工作进程进行处理,这样对于工作进程来说,注册的就是完成事件。这种是高效的半同步/半异步模型,主线程直接对工作线程分发连接套接字,工作线程被主线程唤醒工作,这样不需要竞争请求队列了。

2024-01-24 19:36:18 315

原创 Linux高性能服务器编程8-3自动状态机:HTTP请求的读取和分析

主状态机第一个状态是请求行。请求行需要首先判断是否是GET,其次判断URL是不是正确的(即http://开头,同时后面有一个’/‘),最后判断HTTP版本是不是HTTP/1.1。随后处理头部字段,头部字段每个都是一行(这个HTTP请求示例是空格,我说怎么和服务器处理逻辑对不上…如果是"\0",代表整个请求处理结束(这点很坑,在处理行时需要额外判断,否则会卡住,搞了半天…由于我们一边需要处理HTTP请求,一边还要判断请求是否正确,所以设置两个状态机,一个状态机负责HTTP的状态,一个状态机负责请求行的状态。

2024-01-24 17:24:59 715

原创 Linux高性能服务器第六章高级IO总结

dup可以用来实现对终端的输出,因为终端的标准文件描述符值为1,将其关闭,再复制一个文件描述符,即可将终端的输入输出与该文件描述符联系起来。其中输入的文件描述符必须为一个有实际值的文件描述符,不能是管道和套接字,输出的文件描述符必须是socket。专门用于操作文件描述符属性的函数。dup用来复制一个文件描述符,会选择当前最小的文件描述符作为当前文件描述符的复制。管道的内存容量有限,如果管道满了,写操作将阻塞,如果管道空了,读操作将阻塞。值得注意,dup复制的文件描述符不继承原有的文件描述符属性。

2024-01-23 10:47:58 389 1

原创 Linux高性能服务器编程6-5tee函数

书中给了一个同时输出到文件和终端的案例。tee就像是粘合剂,将两个管道口粘在了一起。splice更像是管道和文件描述符的粘合剂,tee是两个管道专用粘合剂。如果没有粘合剂,就没法从管道向外零拷贝输送消息。tee函数可以实现在两个管道描述符间零拷贝复制数据。

2024-01-23 10:33:28 357 1

原创 Linux高性能服务器编程6-4splice回射服务器

回射服务器使用一个管道,管道的两端全连接到客户端的文件描述符,这样客户端输出的数据直接从管道再流回去。1.如果输入的文件描述符是管道,则偏移量必须为NULL。2.splice的输入和输出中必有一个文件描述符是管道。spilce可以实现在两个文件描述符间零拷贝。服务器没什么显示效果就不放了。

2024-01-23 10:11:03 635 1

原创 Linux高性能服务器编程6-3sendfile

sendfile发送数据可以不用从内核空间到用户空间,再从用户空间发送给客户端;直接从文件中读取后发送,也就是说在代码中不需要读取到一个char数组,再发送char数组(代码48行)。同时,sendfile还有两个特性是输出文件描述符必须是socket,输入描述符不能是socket,必须是一个指向实体的文件描述符。本节使用sendfile从服务器向客户端发送数据。客户端代码直接使用6-2的即可。

2024-01-23 09:30:32 314 1

原创 Linux高性能服务器编程6-2

这里面使用了iovec,可以避免了将几个字符串再拼接起来,减少开销。对许多函数还不是很熟悉。

2024-01-22 23:26:27 302

原创 Linux高性能服务器编程6-1简单CGI实现

主要思路是关闭服务器端的标准输出,同时使用dup复制一个客户端的连接文件描述符占用值为1的文件描述符,printf就会直接输出到客户端。书中的代码我感觉少关闭了dup复制的文件描述符,所以代码中补充了一行close操作。

2024-01-22 22:22:02 579

原创 Linux高性能服务器编程5.11.2修改缓冲区大小

Linux高性能服务器编程

2024-01-22 20:48:59 389

原创 Linux高性能服务器编程 14.8.2 14-3代码

子进程会复制父进程的数据,包括锁的状态,调用fork时父进程的mutex已经上锁了,这时调用fork子进程会复制另一把已经上锁的锁(不是mutex,假设为mutex2),因此,子进程试图给mutex2再次上锁,但是mutex2已经是处于上锁状态了,因此子进程会阻塞。互斥锁可能被加锁了,但不是调用的哪个线程锁住的。按照逻辑来说,create创建完another子线程之后,another线程会先获得锁,随后fork得到的子进程也执行进去获得锁但是阻塞住,随后another释放锁,子进程获得锁,休眠后解锁。

2024-01-09 00:01:18 318

原创 JAVA自带的binarySearch方法详解

总结:1.如果目标在数组中存在,则返回一个下标(如果是多个,则我们不知返回哪个下标,但是一定是其中一个)。2.如果目标在数组中不存在,假设应该插入的位置为x,则返回-(x+1);也就是如果返回的值是y,y是负值,则正确的插入位置为-y-1;在上图中,数值0的搜索值为0下标,数值1的搜索值为1下标,都正确指向了相应的下标。但是其中数值2的搜索值为-3,如果要插入的话,也就是插入到-(-3)-...

2020-01-10 21:44:58 371

原创 图论算法部分总结

1.拓扑排序Ⅰ基于BFS:算法步骤简述:1.找到所有入度为0的点,放入队列。2.将队列中的元素出对一个,令其相邻节点中除了入度为0的节点,剩余节点入度减一,如果减为0,则加入队列。3.重复直到结束。无解的判断:如果队列已经为空,还有节点的入度不为0,则不是有向无环图DAG,不存在拓扑排序。Ⅱ基于DFS:算法步骤简述:1.遍历所有节点,对没有走过的且入度为0的点进行dfs。2.d...

2019-12-23 20:55:27 360

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除