epoll

一、epoll说明

  1. epoll 是在 Linux 2.6 才引进的,而且它并不适用于其它 Unix-like 系统。它提供了一个与select 和 poll 函数相似的功能;
  2. select 可以在某一时间监视最大达到 FD_SETSIZE 数量的文件描述符, 通常是由在 libc 编译时指定的一个比较小的数字;
  3. poll 在同一时间能够监视的文件描述符数量并没有受到限制,即使除了其它因素,更加的是我们必须在每一次都扫描所有通过的描述符来检查其是否存在己就绪通知,它的时间复杂度为 O(n) ,是缓慢的;
  4. epoll不存在这个问题,它只会对活跃的socket进行操作,这是因为在内核实现中,epoll是根据每个fd上面的callback函数实现的,而且fd以红黑树和链表的结构存储。因此,只有活跃的socket才会主动去调用callback函数,其他idle状态socket则不会。在这一点上,epoll实现了一个伪AIO,其内部推动力在内核;
  5. 无论是select,poll还是epoll,它们都需要内核把fd消息通知给用户空间。因此,如何避免不必要的内存拷贝就很重要了。对于该问题,epoll通过内核与用户空间mmap同一块内存来实现。

所以在高并发场景epoll更加适用,当然在并发量比较小的情况下,还是select和poll更合适。

阅读全文 »

poll

一、poll说明

  1. poll的机制与select类似,同样是轮询多个描述符,再根据描述符的状态进行处理;
  2. 但是poll没有描述符数量的限制,这个与机器的上限有关;
  3. 缺点与select类似即需要将大量的描述符从用户态复制至内核态;而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增加。
    阅读全文 »

常用命令

初始化用户

1
2
git config --global user.name "Your Name"
git config --global user.email "Your Email"
阅读全文 »