golang 程序配置文件中的 runtime.kevent 是啥?
Posted
技术标签:
【中文标题】golang 程序配置文件中的 runtime.kevent 是啥?【英文标题】:What is runtime.kevent in a golang program's profile?golang 程序配置文件中的 runtime.kevent 是什么? 【发布时间】:2018-01-05 15:33:19 【问题描述】:我正在分析一个程序,其中绝大多数 (86%) 时间花在两个运行时函数上:kevent 和 selectgo。了解select,但是不知道kevent是什么(所以不知道从哪里开始优化):
Showing top 10 nodes out of 33
flat flat% sum% cum cum%
114.63s 65.79% 65.79% 114.63s 65.79% runtime.kevent /usr/local/Cellar/go/1.9.2/libexec/src/runtime/sys_darwin_amd64.s
19.26s 11.05% 76.85% 35.90s 20.60% runtime.selectgo /usr/local/Cellar/go/1.9.2/libexec/src/runtime/select.go
【问题讨论】:
【参考方案1】:这是network poller。 有多种实现方式:
epoll 用于 Linux kevent queue 达尔文和其他人您看到kevent
是因为在达尔文。
基本上,这是等待 I/O 所花费的时间。
注意它叫netpoll,但它一般适用于文件描述符,所以它可能是网络通信,也可能是文件I/O。
这里有更多关于kqueue和epoll的详细信息。
【讨论】:
谢谢。可以轮询哪些非网络事件?这不是一个网络程序,它不使用任何网络库。 @hunterloftis:来自 go1.9 版本说明:"The os package now uses the internal runtime poller for file I/O" 对不起@hunterloftis,它不限于网络 I/O。相反,我们可以将定义扩大到也涵盖文件 IO 的“文件描述符”。我已经修改了我的答案,并指出要进一步阅读。以上是关于golang 程序配置文件中的 runtime.kevent 是啥?的主要内容,如果未能解决你的问题,请参考以下文章