在Linux的网络编程中,很长的时间都在使用select来做事件触发.在linux新的内核中,有了一种替换它的机制,就是epoll.相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率.因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多.并且,linux/posix_types.h头文件有这样的声明:#define__FD_SETSIZE   1024         表示select最多同时监听1024个fd,当然,可以通…
参考代码 #include <iostream> #include <sys/socket.h> #include <sys/epoll.h> #include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <errno.h> using…
epoll机制详解 大牛的详解 epoll详解 什么是epoll? epoll是为处理大批量句柄而作了改进的poll, 是性能最好的多路I/O就绪通知方法; 只有三个系统调用: epoll_create, epoll_ctl, epoll_wait; epoll_ctl - epoll的事件注册函数,它不同于select()是在监听事件时告诉内核要监听什么类型的事件,而是在这里先注册要监听的事件类型; epoll的工作原理 epoll同样只告知那些就绪的文件描述符,而且当我们调用epoll_wa…
1 TCP简介 tcp是一种基于流的应用层协议,其“可靠的数据传输”实现的原理就是,“拥塞控制”的滑动窗口机制,该机制包含的算法主要有“慢启动”,“拥塞避免”,“快速重传”. 2 TCP socket建立和epoll监听实现 数据结构设计 linux环境下,应用层TCP消息体定义如下: typedef struct TcpMsg_s { TcpMsgHeader head; void* msg; }TcpMsg; 其中,head表示自定义的TCP消息头,它的定义如下: //TCP消息类型,根据业…
一.参考网址 1.epoll机制:epoll_create.epoll_ctl.epoll_wait.close 2.Linux网络编程 使用epoll实现一个高性能TCP Echo服务器 3.用C写一个web服务器(二) I/O多路复用之epoll 二.…
剖析epoll机制 Linux epoll机制; 写这篇文章的原因是, 上次百度面试被问到一个事件怎么添加到epoll的双向链表中的; 这个问题比较深入, 涉及到内核的实现问题, 今天就来理解一下; epoll和select/poll完全不同, epoll通过在Linux内核中申请一个简易的文件系统(文件系统一般用什么实现? B+树); B+树, 相当于一个2-3的扩展, 一个节点可以有多个数据项, B+树而且它的叶子结点才有真正的数据, 并用一个单链表链接起来的; epoll调用分成3个部分:…
目录 为什么要用select机制 等待队列 唤醒操作 什么是select机制 关于fd_set select使用 poll函数 为什么select效率较低 什么是epoll epoll机制实现思路 epoll程序的使用框架 在学习网络编程的时候,是需要处理客户端的并发请求的.一般解决办法有1.多线程/多进程模型;2.多路复用模型. 多线程/多进程在这里不讨论,涉及到进程间通信的问题以及处理访问冲突的一些问题,之后会介绍.在这里主要记录一下多路复用模型.谈到多路复用模型,最简单的自然是select…
epoll是Linux中用于IO多路复用的机制,在nginx和redis等软件中都有应用,redis的性能好的原因之一也就是使用了epoll进行IO多路复用,同时epoll也是各大公司面试的热点问题. IO多路复用 IO多路复用是一种同步IO模型,使得一个线程就可以对多个文件描述符进行监听.当有文件描述符准备就绪时,函数就会返回,从而通知应用进行相应的处理:当没有描述符就绪时,函数就会阻塞. IO多路复用对于网络应用来说是非常重要的,在没有IO多路复用时,应用一般通过同步阻塞(每个socket连…
在linux设计并发网络程序,主要有如下几种模型:Apache模型(Process Per Connection, PPC).TPC(Thread Per Connection)模型,select机制.poll机制以及epoll. 1.  PPC/TPC模型 这两种模型思想类似,每一个新的链接就用一个线程或者进程处理.PPC使用使用进程.TPC使用线程.缺点是连接多了以后,这么多进程和线程的切换非常大.因此这类模型的能接受的最大连接数不会太高,一般几百个左右. 2.  select机制 PPC/…
首先介绍阻塞与非阻塞:阻塞是个什么概念呢?比如某个时候你在等快递,但是你不知道快递什么时候过来,而且你没有别的事可以干(或者说接下来的事要等快递来了才能做):那么你可以去睡觉了,因为你知道快递把货送来时一定会给你打个电话(假定一定能叫醒你). 非阻塞忙轮询.接着上面等快递的例子,如果用忙轮询的方法,那么你需要知道快递员的手机号,然后每分钟给他挂个电话:“你到了没?” 很明显一般人不会用第二种做法,不仅显很无脑,浪费话费不说,还占用了快递员大量的时间.大部分程序也不会用第二种做法,因为第一种方法经…