【发布时间】:2022-01-12 16:37:18
【问题描述】:
我只想知道对于 FreeBSD 的 kqueue 和对于 Linux 的 epoll 和其他内核空间轮询函数是否是处理套接字和连接的默认操作系统行为?
我问这个是因为我已经阅读了处理 tcp 请求的 Erlang 网络驱动程序部分的源代码,并且有任何 kqueue 或 epoll 或类似的东西来轮询来自套接字的事件
【问题讨论】:
我只想知道对于 FreeBSD 的 kqueue 和对于 Linux 的 epoll 和其他内核空间轮询函数是否是处理套接字和连接的默认操作系统行为?
我问这个是因为我已经阅读了处理 tcp 请求的 Erlang 网络驱动程序部分的源代码,并且有任何 kqueue 或 epoll 或类似的东西来轮询来自套接字的事件
【问题讨论】:
根据博客文章I/O polling options in OTP 21,从 Erlang/OTP 21.0 开始,是否使用内核轮询在编译时决定(在早期版本中,您可以通过传递 +K 命令行选项显式激活它)。据我了解,只要您的系统支持,它就会默认开启。
你可以用system_info检查内核轮询是否被激活:
> erlang:system_info(kernel_poll).
true
【讨论】:
epoll 或 kqueue创建绑定侦听和接受连接而不通过代码指定其行为?因为 Erlang Network Driver 中没有内核轮询功能所以希望你能理解我的问题
erl_poll.c。