Poll本质上是Linux系统调用,其接口为,作用是监控资源是否可用。

    我们重点看看epoll,它大幅提升了高并发服务器的资源使用率,相比poll而言哦。前面提到poll会轮询整个文件描述符集合,而epoll可以做到只查询被内核IO事件唤醒的集合,当然它还提供边沿触发(Edge Triggered)等特性。

    这是怎么做到的呢?简单来说epoll是基于文件描述符的callback函数来实现的,只有发生IO事件的socket会调用callback函数,然后加入epoll的Ready队列。更多实现细节可以参考Linux源码,

    Mmap不是进程的概念,这里提一下是因为epoll使用了它,这是一种共享内存的方法,而Go语言的设计宗旨是”不要通过共享来通信,通过通信来共享”,所以我们也可以思考下进程的设计,是使用mmap还是Go提供的channel机制呢。