Github 主页:
https://github.com/panjf2000/gnet/
gnet 是一个基于 Event-Loop 事件驱动的高性能和轻量级网络库。这个库直接使用 epoll 和 kqueue 系统调用而非标准 Golang 网络包:net 来构建网络应用,它的工作原理类似两个开源的网络库:libuv 和 libevent。
这个项目存在的价值是提供一个在网络包处理方面能和 Redis、Haproxy 这两个项目具有相近性能的 Go 语言网络服务器框架。
gnet 的亮点在于它是一个高性能、轻量级、非阻塞的纯 Go 实现的传输层(TCP/UDP/Unix-Socket)网络库,开发者可以使用 gnet 来实现自己的应用层网络协议,从而构建出自己的应用层网络应用:比如在 gnet 上实现 HTTP 协议就可以创建出一个 HTTP 服务器 或者 Web 开发框架,实现 Redis 协议就可以创建出自己的 Redis 服务器等等。
gnet 衍生自另一个项目:evio,但是性能更好。
--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china...@googlegroups.com。
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/golang-china/b02a8d01-3ff8-49a8-9241-6b045c494340%40googlegroups.com。
引申一个思考:1 若是追求极致的性能和低资源占用,这个事情是否可以用c来做,libevent libuv 都是不错的选择2 相比于单台百万的并发的单台server,如果放在一个k8s的集群中做作可scalability的服务是不是会更好
Andy Pan <panj...@gmail.com> 于2019年10月11日周五 上午10:46写道:
Goroutine 底层的确是用 epoll 和 kqueue,但是 Go 为了达到 "用同步的模式来写异步的代码" 的工程性目的,导致用原生 Go 写网络服务器的时候的模式是 goroutine-per-connection,当连接数过大的时候会产生海量的 goroutines,虽然每个 goroutine 只有几 KB,但是也架不住数量多啊,资源损耗会非常严重,而且数量过多给调度器造成的压力也是不容小觑的,会进一步降低性能,直接用 epoll 或 kqueue 就是为了自己管理读写,用少量的 goroutine 管理海量的 goroutine,节省系统资源,提高并发性能。可以参考一下这个系列文章:百万 Go TCP 连接的思考: epoll方式减少资源占用
On Fri, Oct 11, 2019 at 9:57 AM tegoor <teg...@gmail.com> wrote:
标准库 底层 也是用的 epoll 和 kqueue 啊--你这不是多此一举...
On Friday, September 27, 2019 at 9:59:37 AM UTC+8, Andy Pan wrote:Github 主页:
https://github.com/panjf2000/gnet/
gnet是一个基于 Event-Loop 事件驱动的高性能和轻量级网络库。这个库直接使用 epoll 和 kqueue 系统调用而非标准 Golang 网络包:net 来构建网络应用,它的工作原理类似两个开源的网络库:libuv 和 libevent。这个项目存在的价值是提供一个在网络包处理方面能和 Redis、Haproxy 这两个项目具有相近性能的 Go 语言网络服务器框架。
gnet的亮点在于它是一个高性能、轻量级、非阻塞的纯 Go 实现的传输层(TCP/UDP/Unix-Socket)网络库,开发者可以使用gnet来实现自己的应用层网络协议,从而构建出自己的应用层网络应用:比如在gnet上实现 HTTP 协议就可以创建出一个 HTTP 服务器 或者 Web 开发框架,实现 Redis 协议就可以创建出自己的 Redis 服务器等等。
gnet衍生自另一个项目:evio,但是性能更好。
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china+unsubscribe@googlegroups.com。
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/golang-china/b02a8d01-3ff8-49a8-9241-6b045c494340%40googlegroups.com。
--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china+unsubscribe@googlegroups.com。
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/golang-china/CAHaqaZSXWe3Y1%3D2X0_o8CiWNVHY5YLi14L5YgH9OhdYVc%3DR5Ag%40mail.gmail.com。