How TCP Sockets Work

Posted by 夏泽民

https://eklitzke.org/how-tcp-sockets-work tcp 连接的可读可写有两种方式通知内核:轮询和中断 内核收到可读事件可写事件后分配连接队列(backlog),listen的时候设置;或者拒绝连接。 应用程序读写数据有两种方式:阻塞和非阻塞;阻塞方式是read/write系统调用后,一直等待,连接队列的接受/发送缓冲可读/写的时候,读/写数据,处理完了返回。非阻塞方式read/write系统调用后立即返回。连接队列的接受/发送缓冲可读/写的时候处罚读写事件,事件处理器(libevent)分发给处理函数处理。



io 模型

Posted by 夏泽民

不要用操作磁盘文件的经验去看待网络IO 相比于传统的网络IO来说,一个普通的文件描述符的操作可以分为两部分。以read为例,我们利用read函数从socket中同步阻塞的读取数据,整个流程如下所示: 调用read后,该调用会转入内核调用 内核会等待该socket的可读事件,直到远程向socket发送了数据。可读事件成立(这里还需要满足TCP的低水位条件,但是不做太详细的讨论) 数据包到达内核,接着内核将数据拷贝到用户进程中,也就是read函数指定的buffer参数中。至此,read调用结束。 可以看到除了转入内核调用,与传统的磁盘IO不同的是,网络IO的读写大致可以分为两个阶段:



SO_REUSEPORT 惊群

Posted by 夏泽民

单个进程监听多个端口 单个进程创建多个 socket 绑定不同的端口,TCP, UDP 都行



pprof

Posted by 夏泽民

runtime/pprof:采集程序(非 Server)的运行数据进行分析 net/http/pprof:采集 HTTP Server 的运行时数据进行分析



kedis

Posted by 夏泽民

https://github.com/jianqingdu/kedis



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required