-
Go netpoll I/O 多路复用构建原生网络模型之源码深度解析
2020-03-14 22:51按 goroutine 的设计初衷,它是一种及其轻量的用户态线程,创建成本极低、能被高效地调度,可以轻而易举地创建成千上万的 goroutine,这种模式也是最简单直接的,所以大多数时候无需考虑复用,Go 的 http 的实现就是 goroutine-per-connection 这种模式。复用 goroutine 只是极少数 goroutine 数量过于庞大的业务场景才需要的。
-
gnet: 一个轻量级且高性能的 Go 网络框架
2020-03-03 21:13对,开启多核是多 IO 线程,Reactor 线程还是只有一个,多主 Reactors 的实现暂时没有计划,而且其实单 Reactor 已经足够了,Redis 的 IO multiplexer 不也是单线程,一样性能极高。
-
从零开始安装 solo 博客
2019-11-27 21:42solo 在 github 上怎么提不了 issue 了?我看所有 issue 也都没了,咋回事?现在最新版 solo 代码高亮功能失效了,能看看咋回事吗?
-
Goroutine 并发调度模型深度解析之手撸一个高性能 goroutine 池
2019-11-14 14:54就是要这么对比才合理:不池化 vs 池化,我项目里的 benchmark 代码里也有用 buffered channel 实现简单的池化,所以是:原生 go 程 vs 用 buffered channel 简单池化 vs 用 ants pool。只要是手动限制 go 程数量,本身已经是做池化了。
-
Goroutine 并发调度模型深度解析之手撸一个高性能 goroutine 池
2019-11-13 13:17mutex 需要把等待锁的 goroutine 放置在等待队列,等到锁释放了才唤醒,使用 spin-lock 是利用 gosched 抢占调度主动让出 CPU 并且把当前 goroutine 保存堆栈状态,以 _Grunnable 状态放入 Global 队列中,无需对 G 进行唤醒操作,因为总会有 M 从 Global 队列取得并执行该 G,性能会稍有提升。
另外,其实 mutex 内部也实现了 spin-lock,但是这个内置的 spin-lock 机制只会 spin 几次而已,而且还有其他的限制条件比如:GOMAXPROCS>1、多核、当前 G 所在的 P 的 local 队列为空,有兴趣可看下源码:https://github.com/golang/go/blob/97d0505334c71a8d7a1e7431c1e1515c93b59e2b/src/runtime/proc.go#L5321-L5334
-
gnet: 一个轻量级且高性能的 Go 网络框架
2019-10-25 23:40 -
gnet: 一个轻量级且高性能的 Go 网络框架
2019-09-21 16:12在 Event.Opened 方法里可以在连接第一次被打开的时候主动写往客户端写数据,或者调用 conn.Wake() 方法也可以异步写数据。