为什么说 golang, net 包是对 epoll 的完美封装

2023-08-12 17:58:56 +08:00
jackniu  jackniu

和别的语音相比好在那里了

3030 次点击
所在节点   Go 编程语言  Go 编程语言
21 条回复
yulon
yulon
2023-08-13 01:35:25 +08:00
谁说的?
gowk
gowk
2023-08-13 08:47:43 +08:00
先说是不是 再说为什么
wkong
wkong
2023-08-13 10:21:55 +08:00
如果完美了,我们开源项目就没必要再重新封装了。
julyclyde
julyclyde
2023-08-13 13:26:21 +08:00
你这就跟“中国专家”的“论证”似的
先确定结果,再找论据
flyqie
flyqie
2023-08-13 15:32:31 +08:00
谁说的?

给个出处?
lance6716
lance6716
2023-08-13 23:35:26 +08:00
谁说的去问谁
voidmnwzp
voidmnwzp
2023-08-14 09:53:15 +08:00
@wkong 还要封装啥 go 不是有个装门的 M 来挂载要 io 的 G 的 epoll 事件吗,虽然看起来是 bio
llwwbb7
llwwbb7
2023-08-14 11:19:51 +08:00
@wkong 介绍一下哪个开源项目重新封装了 epoll ,学习下
lysS
lysS
2023-08-14 11:34:56 +08:00
确实封的挺好,还和 runtime 绑定了;但是它的 raw 相关的太少了,还得用 x/net
huangwei8ku
huangwei8ku
2023-08-14 11:42:06 +08:00
完美其实谈不上的,只是在你的业务场景里面比较合适,golang 官方其实想实现的是一种 goroutine-per-connection 这样的极简的开发模式给使用者。这种开发模式极大地降低了开发者编写网络应用时的心智负担,且借助于 Go runtime scheduler 对 goroutines 的高效调度,不论从适用性还是性能上都足以满足绝大部分的应用场景。所以才说在你的业务应用场景里可能发挥的好。另外 net 包也只是调用,实现 epoll 的实际上是 runtime 包里面的 netpoll_epoll.go
wkong
wkong
2023-08-14 13:05:33 +08:00
777777
777777
2023-08-14 13:28:11 +08:00
net 包是 bio ,但 go 的协程是 nio ,所以应该是 go 原生封装了 epoll
joApioVVx4M4X6Rf
joApioVVx4M4X6Rf
2023-08-14 14:00:08 +08:00
@wkong 大佬,请问为什么要重新封装 epoll
1423
1423
2023-08-14 14:08:50 +08:00
我是十分认同的
wkong
wkong
2023-08-14 14:42:50 +08:00
@v2exblog 原生的其实底层也是用的 epoll ,但是到上层后必须要一个 goroutine 一个连接,我们是即时通讯的项目,如果 100 万同时在线,那就需要 100 万个 goroutine ,消耗还是很大的。
joApioVVx4M4X6Rf
joApioVVx4M4X6Rf
2023-08-14 15:02:23 +08:00
@wkong 学到了谢谢大佬解答
chronos
chronos
2023-08-14 16:36:05 +08:00
怎么在这里也搞知乎式的问题
Rehtt
Rehtt
2023-08-15 08:12:01 +08:00
@wkong 都用 go 了,高负载时不得上多机器分布式吗
securityCoding
securityCoding
2023-08-16 23:38:38 +08:00
真实 rpc 场景消耗还是太大了,一般还是会重新封装一层复用协程
shaoyie
shaoyie
2023-08-22 17:19:18 +08:00
确实组织的很完美,再结合 g 的调度,以及 timer 的结合,能让它表现出很强的性能和过程化开发能力(虽然说单个 poller 有些许不如意,但整体还是很强悍的,不信的同学可以 自己测试一下,我这有份测试代码,可以参考 https://github.com/shaovie/goev/blob/main/example/nettcp.go
可以研究一下 SetReadDeadline 的实现,感受其奥妙

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/964736

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX