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 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

golang配置文件热更新

在 Golang 项目中使用 Spring Cloud Config Server 管理配置

golang模块viper读取配置文件

VSCode从非根目录编译golang程序

golang viper & hcl 配置文件问题

golang设计模式之单例模式