
网络IO
文章平均质量分 85
介绍网络编程、性能底层相关
削土豆er的人
这个作者很懒,什么都没留下…
展开
-
网络IO小白的进阶之路6-select&epoll详细介绍
select的缺点:1、单个进程能够监视的文件描述符的数量存在最大限制,通常是1024,当然可以更改数量,但由于select采用轮询的方式扫描文件描述符,文件描述符数量越多,性能越差;(在linux内核头文件中,有这样的定义:#define __FD_SETSIZE 1024)2、内核 / 用户空间内存拷贝问题,select每次都会改变内核中的句柄数据结构集,因而每次select调用时都需要从用户空间向内核空间复制所有的句柄数据结构,产生巨大的开销3、select返回的是含有转载 2020-09-01 20:21:15 · 176 阅读 · 0 评论 -
WSGI你不知道的事
wsgi是什么?是一个协议,定义了一套接口,实现服务器端和应用端的通信的规范化,使web底层和application解耦。就如下图:wsgi主要有两个工作:1.和服务端的交互:从底层解析http协议,然后调用应用程序提供的环境信息(host、post、进程模式等)和回调函数(这个回调函数就是将app设置的http header、status等信息传递给服务端)。2.和app的交互:即上面的回调函数所做的内容,将app设置的http header、status等信息生成返回的header、body、原创 2020-08-24 16:08:35 · 260 阅读 · 0 评论 -
网络IO小白的进阶之路2-阻塞IO
本人这些年看了无数介绍网络IO的技术文章,讲实话,没有一篇完全看懂的,无数次放弃学习,有无数次咬牙坚持学,直到今天看了这篇文章 https://www.cnblogs.com/findumars/p/6361627.html,茅塞顿开,原来网络IO基础并没有很难,所以想在此,和大家分享学习内容,供自己和大家学习。Richard Stevens的“UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking ”,6.2节“转载 2020-08-24 19:52:09 · 188 阅读 · 0 评论 -
网络IO小白的进阶之路3-非阻塞IO
上篇文章 https://blog.youkuaiyun.com/qq_38110368/article/details/108206010 提到,单线程阻塞IO 是在等待数据和拷贝数据两个阶段都是阻塞状态,而进程/线程池的方案能处理的连接数,缓解的调用IO也很有限。因此出现非阻塞IO(non-blocking IO)2. 非阻塞IO2.1 实现原理Linux下,可以通过设置socket使其变为non-blocking。当对一个non-blocking socket执行读操作时,流程是这个样子:图4 非阻塞IO转载 2020-08-24 20:10:19 · 125 阅读 · 0 评论 -
网络IO小白的进阶之路4-IO多路复用
上篇文章 https://blog.youkuaiyun.com/qq_38110368/article/details/108207016中提到,非阻塞IO的方式,需要用户态不断主动询问kernel数据准备好了没有,并且每次只能检测一个连接。实际操作系统提供了更为高效的检测“操作是否完成“作用的接口。3. 多路复用IO(IO multiplexing)IO multiplexing这个词可能有点陌生,但是如果说select/epoll,大概就都能明白了。有些地方也称这种IO方式为事件驱动IO(event driv转载 2020-08-24 20:54:22 · 143 阅读 · 0 评论 -
网络IO小白的进阶之路5-异步IO
4. 异步IO(Asynchronous I/O)Linux下的asynchronous IO其实用得不多,从内核2.6版本才开始引入。先看一下它的流程:用户进程发起read操作之后,立刻就可以开始去做其它的事。而另一方面,从kernel的角度,当它受到一个asynchronous read之后,首先它会立刻返回,所以不会对用户进程产生任何block。然后,kernel会等待数据准备完成,然后将数据拷贝到用户内存,当这一切都完成之后,kernel会给用户进程发送一个signal,告诉它read操作完成转载 2020-08-24 21:03:41 · 179 阅读 · 0 评论 -
网络IO小白的进阶之路1
影响的都是收消息方式:1.简单的一问一答式client的一个线程收,一个线程发;server的一个线程收,一个线程发。消息是阻塞同步的,一直阻塞在那里,只有内核态收完了,才会拷贝到用户态。这种机制会让程序一直挂在内核态,不占用cpu资源。只有数据拷贝到用户态之后,才会唤醒。2.多个client+server1.)多进程/线程的阻塞同步,即10个client,启10个线程,每个线程都用阻塞的方式处理。2.)单线程/进程+非阻塞同步方式。所有的fd都放在一个队列里,一直在轮训轮训,立刻返回???原创 2020-08-24 16:06:41 · 123 阅读 · 0 评论