以上就能实现协程这种执行流, 并能进行切换和恢复....这样在扩展 go heap 时, mmap 出现不连续的地址, 导致运行时 throw.
在 1.11 中, 改用了稀疏索引的方式来管理整体的内存....如何解决这个问题? go 使用了写屏障, 这里的写屏障是指由编译器生成的一小段代码....GC 结束后, 会根据这一次 GC 的情况来进行负反馈计算, 计算下一次 GC 开始的阈值.
如何保证按时完成 GC 呢?...但是在打印 gctrace 日志时, 还保持着开启 gc 需要的锁, 所以, 打印 gc trace 日志一直没完成, 而 gc 又比较频繁, 比如 0.1s 一次, 这样会导致下一次 gc 开始时无法获取锁