Golang 需要异步吗

2019-09-28 12:53:22 +08:00
 xuxu555

前段时间,撸了个轮子 gev,主要就是基于 Reactor 模式的一个非阻塞 TCP 网络库,直接操作 epoll 和 kqueue,没有使用 net 标准库。

优点就是快和内存占用低,缺点就是 issue 里这位大佬说的:

go 使用协程+阻塞的模式来处理并发问题。这样的模式虽然对运行时要求很高,但对程序员却非常友好。这样的代码码也非常容易维护。 异步模式最大的问题就是回调嵌套,项目大了根本没法维护。我就是不想用回调方式写业务代码才转 go 的。 你认为这类 go 语言的异步框架有什么优势,要解决什么问题?

Issue 里有一些讨论,肯定的、否定的都有。 Issue 链接: https://github.com/Allenxuxu/gev/issues/4

个人觉得,这种异步库作为特殊场景的补充还是有价值的,内存占用低,速度也快,毕竟 Go 在 IOT 方面还是有很大希望的。也可能是因为我受 muduo 影响比较深,更加偏爱这种方式。。。

想听听大家怎么看呢?

6301 次点击
所在节点    分享创造
22 条回复
xuxu555
2019-09-29 14:50:59 +08:00
yulon
2019-10-01 12:48:41 +08:00
楼上们真的信手拈来,不看源码在那空想:
https://github.com/golang/go/blob/master/src/runtime/netpoll_epoll.go
https://github.com/golang/go/blob/master/src/runtime/netpoll_windows.go
https://github.com/golang/go/blob/master/src/runtime/netpoll_kqueue.go
https://github.com/golang/go/blob/master/src/runtime/netpoll_aix.go
https://github.com/golang/go/blob/master/src/runtime/netpoll_solaris.go

Linux epoll、Windows IOCP、macOS kqueue,你们想到的想不到的,写 Go 的那群老人精会想不到?

「而且在 win 下写代码的还是更多吧」?你说 epoll 细分之后效率高没问题,IOCP 不比 epoll 简单? epoll 还只支持网络呢,Linux 异步读写文件不用另一套东西?

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

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

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

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

© 2021 V2EX