网络轮询器
为了提高 I/O 多路复用的性能,不同的操作系统也都实现了自己的 I/O 多路复用函数,
例如:epoll、kqueue 和 evport 等。
Go 语言为了提高在不同操作系统上的 I/O 操作性能,使用平台特定的函数实现了多个版本的网络轮询模块
src/runtime/netpoll_epoll.go
src/runtime/netpoll_kqueue.go
src/runtime/netpoll_solaris.go
src/runtime/netpoll_windows.go
src/runtime/netpoll_aix.go
src/runtime/netpoll_fake.go
在runtime/netpoll.go 文件中描述了需要实现的方法
func netpollinit()
//初始化网络轮询器
func netpollopen(fd uintptr, pd *pollDesc) int32
//监听文件描述符上的边缘触发事件,创建事件并加入监听
func netpoll(delta int64) gList
//如果参数小于 0,无限期等待文件描述符就绪;
//如果参数等于 0,非阻塞地轮询网络;
//如果参数大于 0,阻塞特定时间轮询网络;