RPC 通常有较重的处理逻辑,因此无法串行处理 I/O。而 Go 的标准库net设计了BIO(Blocking I/O) 模式的API,使得 RPC 框架设计上只能为每个连接都分配一个goroutine。 这在高并发下,会产生大量的goroutine,大幅增加调度开销。此外,net.Conn 没有提供检查连接活性的API,因此 RPC 框架很难设计出高效的连接池,池中的失效连接无法及时清理。
另一方面,开源社区目前缺少专注于 RPC 方案的Go网络库。类似的项目如:evio , gnet等,均面向 Redis,HAProxy这样的场景。
因此Netpoll应运而生,它借鉴了evio和 netty的优秀设计,具有出色的 性能,更适用于微服务架构。 同时,Netpoll还提供了一些 特性,推荐在RPC设计中替代net。
CloudWeGo-Netpoll | #框架
上面的教程有动画、有示例代码、有案例,由浅入深非常专业
Fluxus 是一个用于 3D 图形、声音和游戏的快速原型制作、游戏和学习环境。使用图形命令扩展Racket语言,可以在它自己的实时编码环境中或从 DrRacket IDE 中使用。
Fluxus 是跨平台的(Linux、Windows、OSX、Android、PS2、Raspberry Pi 和 WebGL),并在GPL许可下发布。