网络编程
五山口老法师
腾讯后台开发工程师
展开
-
epoll深入解读
首先说一下传统的I/O多路复用select和poll,对比一下和epoll之间的区别:举个例子:假如有100万用户同时与一个进程保持TCP连接,而每一时刻只有几十或者几百个tcp连接是活跃的(即能接收到TCP包),那么在每一时刻进程只需要处理这100万连接中的有一小部分。select和poll这样处理的:在某一时刻,进程收集所有的连接,其实这100万连接中大部分是没有事件发生的。因此,如果每次收集事件时,都把这100万连接的套接字传给操作系统(这首先就是用户态内存到内核内存的大量复制),而由操...原创 2020-07-06 16:59:10 · 316 阅读 · 0 评论 -
深度好文:select与非阻塞IO
对于面向连接的socket类型(SOCK_STREAM,SOCK_SEQPACKET)在读写数据之前必须建立连接,首先服务器端socket必须在一个客户端知道的地址进行监听,也就是创建socket之后必须调用bind绑定到一个指定的地址,然后调用int listen(int sockfd, int backlog);进行监听。此时服务器socket允许客户端进行连接,backlog提示没被acce...转载 2018-07-29 11:17:29 · 621 阅读 · 0 评论 -
并发服务器编程模型
在并发服务器编程模型中,最简单的就是父进程监听外来连接请求,一旦请求到来,父进程fork()子进程处理连接,与外来客户端进行交互。此时通用的做法是:父进程copy自己的地址空间给子进程,此时子进程拥有与父进程相同的打开的文件描述符!即,父子进程都有一个监听套接字、一个连接套接字。连接建立后,父进程关闭连接套接字,子进程关闭监听套接字。我们知道,调用close()关闭套接字会导致tcp发送F...原创 2018-10-18 15:40:53 · 238 阅读 · 0 评论 -
处理被中断的系统调用
首先我们要知道什么是慢系统调用!慢系统调用:就是使系统进程可能永远阻塞的系统调用。比如,服务器调用accept()等待客户端的链接,但是客户端在无限的时间内都没有连接的话,服务器将会一直阻塞在这个accept函数之下。当进程阻塞在慢系统调用时,进程接收到系统发送的中断信号。会使得该系统调用发生中断。一般情况下,必须要考虑重启这个被中断的系统调用。举个栗子:int connfd;...原创 2018-10-18 17:47:28 · 455 阅读 · 0 评论 -
UNIX:描述符和文件结构
对于一个打开的文件,UNIX提供了三种数据结构来表示。1)进程地址空间中的进程表项中的描述符表。其实就是一个数组,每一项就是一个k-v,k是fd,v是该描述符对应的打开文件在内核中的文件表项的地址。2)文件表项。包括文件状态标志、当前文件偏移量、v节点的地址。文件状态标志位提供一些文件操作的选项、文件偏移量提供当前文件在内核中的读写初识位置、v节点地址是指向v节点的指针。3)v节点和i...原创 2019-04-22 10:05:59 · 302 阅读 · 0 评论 -
UNIX:缓冲区和重定向
-scanf读入原则单字符读入,跳过空格、制表、换行-getchar 读入原则:单字符读入,读取每个字符包括空格制表换行与putchar一起被定义为供预处理器使用的宏,不是真正意义上的函数I/O函数:所有系统都通用的具有可移植性的函数,处理文件输入、输出的程序也使用这些函数宏输入形式分两种:-缓冲输入:按下enter键后才能使用输入的数据-无缓冲输入:输入的字符立即被程...原创 2019-04-22 10:17:26 · 173 阅读 · 0 评论