自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LT和ET模式比较及实现

我前几个博客说过epoll支持ET工作模式,这种有人可能会问,我们不是read/recv函数是阻塞的嘛,为啥修改文件描述符的文件状态来说明是非阻塞I/O呢?其实read函数只是一个通用的读文件设备的接口,其是否阻塞需要由设备的属性(文件描述符)和设定(设置recv的参数)所决定。一般来说,读字符终端、网络的socket描述字,管道文件等,这些文件的文件状态默认都是阻塞的方式,如果是读磁盘上...

2018-12-08 12:43:14 993 1

原创 I/O复用三种API的比较

I/O复用虽然可以同时监听多个文件描述符,但他本身是阻塞的。并且,当多个文件描述符同时就绪时,如果不采用额外的措施,程序就只能按顺序依次处理其中的每一个文件描述符,这样I/O复用看起来就像是串行的,要实现并法就需要用多进程或多线程实现。select  poll  epoll  比较1:事件集select的参数没有将文件描述符单独与事件绑定,而是用文件描述符的集合fd_set中的每一位代...

2018-12-06 14:28:59 333

原创 高性能服务器编程-----I/O多路复用(epoll)

对于poll我们也有很大的缺陷,比如我们依旧需要每次监听时从用户态将要监听的事件拷贝到内核态进行操作,并且poll与select都不能直接返回我们已就绪的文件描述符,而是需要用户进行循环判断事件是否就绪。。。Linux给我们提供了一个独有的I/O复用函数epoll,解决了这些问题。epoll是Linux独有的,是select和poll的改进epoll API详解epoll不像poll和...

2018-12-05 19:49:15 228

原创 高性能服务器编程-----I/O多路复用(poll)

I/O复用的第二个系统调用pollpoll  API详解poll与select类似,内核中也是在指定时间轮询一定数量的文件描述符,以测试其中是否有就绪者。poll  API原型#include<poll.h>int poll(struct pollfd* fds,nfds_t nfds,int timeout); //返回 -1出错 0超时 ...

2018-12-05 11:14:47 276

原创 网络编程----TCP连接的断开(四次挥手)

上个博客讲解了TCP连接建立的全过程,以及其连接双方的各个状态,那么连接断开的时候又是什么情况呢?TCP断开连接发起链接的主动方基本都是客户端,但是断开连接的主动方服务器和客户端都可以充当。四次挥手是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:由于TCP连...

2018-12-03 11:47:36 2050 2

原创 网络编程---TCP连接的建立(三次握手)

前几个博客一直在说TCP是面向连接的服务,那么TCP连接的建立和关闭是怎样一回事?TCP连接的建立起初两端的TCP进程都处于CLOSED(关闭)状态我们从tcp编程就可以知道每次是服务器首先启动,启动之后实际上是创建了TCB传输控制块,随后进入LISTEN状态,等待客户端连接请求。客户端启动起来也是先创建TCB传输控制块,接下来连接阶段。ps:seq是数据包本身的序列号;ack...

2018-12-02 17:31:47 439

原创 TCP的拥塞控制

不止TCP流量控制(滑动窗口),超时重传是TCP可靠的保证,TCP的拥塞控制仍然是TCP可靠传输的保证。TCP拥塞控制流量控制解决了 两台主机之间因传送速率而可能引起的丢包问题,在一方面保证了TCP数据传送的可靠性。然而如果网络非常拥堵,此时再发送数据就会加重网络负担,那么发送的数据段很可能超过了最大生存时间也没有到达接收方,也会产生丢包问题。拥塞:对资源的需求超过了可用的资源(计算机...

2018-12-02 16:07:35 302

原创 高性能服务器编程-----I/O多路复用(select)

我们从多进程/多线程编程到进程池与线程池编程,效率在一步一步提高,但是对于线程池/进程池还是有个弊端,就是一旦分配一个进程/线程与某一个客户端进行交互时,这个进程/线程不论客户端有没有事件请求,都必须等待直到客户端与其断开这个进程/线程才能与其他客户端进行交互,实际上这是非常不好的,因为我们根本不知道客户端什么时候断开链接,那么在客户端没有事件请求的时候,我们怎么样将这些时间利用起来处理有事件发生...

2018-12-01 15:45:09 246

空空如也

空空如也

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

TA关注的人

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