经过SOFAMosn了解goroutine只能在必定并发量级上下降并发编程的难度(goroutine内存占用2kb+)。 高并发的场景仍是NIO比较适合。git
GoLang 的转发性能比起 C++ 确定是稍有逊色的,为了尽量的提升 MOSN 的转发性能,咱们在线程模型上进行优化,当前 MOSN 支持两种线程模型,用户可根据场景选择开启适用的模型。github
以下图所示,使用 GoLang 默认的 epoll 机制,对每一个链接分配独立的读写协程进行阻塞读写操做,proxy 层作转发时,使用常驻 worker 协程池负责处理 Stream Event编程
以下图所示,基于 Netpoll 重写 epoll 机制,将 IO 和 PROXY 均进行池化,downstream connection 将自身的读写事件注册到 netpoll 的 epoll/kqueue wait 协程,epoll/kqueue wait 协程接受到可读事件,触发回调,从协程池中挑选一个执行读操做。api
本文整理自SOFAMosn官方文档微信
我的微信公众号:并发
我的github:ide
我的博客:性能