摘要:
sendfile() 在2个文件描述符之间传递数据(完全在内核中),避免在内核缓冲区和用户缓冲区之间进行数据拷贝,效率很高。是一种重要的零拷贝技术。 sendfile原理 sendfile()系统调用利用DMA引擎将文件中的数据拷贝到操作系统的内核缓冲区中,然后数据被拷贝到与socket相关的内核缓 阅读全文
摘要:
介绍两种高性能定时器:时间轮和时间堆。 时间轮 基于排序链表的定时器,使用一条链表存放所有定时器(时间复杂度O(n)),因此存在添加定时器效率偏低的问题。当存在需要大量添加定时器场景时,添加定时器可能会严重影响性能。 时间轮可以有效解决这个问题。下图是一个简单时间轮的示意图: 时机轮内,实线指针指向 阅读全文
摘要:
fcntl(file control)提供对文件描述符的各种控制操作。另一个常见控制文件描述符的系统调用是ioctl,提供更多控制。 fcntl提供常用属性和行为的控制,是POSIX规定的首选方法。 本文对fcntl常用操作进行一个简要汇总。 fcntl 声明 #include <unistd.h> 阅读全文
摘要:
dup() 如何把标志输入(stdin)重定向到一个文件,或者把标志输出(stdout)重定向到一个网络连接(sockfd)? 可以用系统调用dup或dup2。 #include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd 阅读全文