我最近在做 GoTorch https://github.com/wangkuiyi/gotorch 这个深度学习系统的时候,发现深度学习跳不过 Cgo,并且 Cgo 会影响 goroutine 的调度,而 goroutine 和(被调用的 C++ 库中的)thread local 机制不兼容,所以不得不深入了解 Go runtime 里的 Cgo 和 goroutine 机制。这个学习过程记录在了「Go的隐秘世界」系列文章里 https://zhuanlan.zhihu.com/p/238311691 。
关于 goroutine 和 C++ thread local 机制不兼容的问题,详见我的同事 沈雕墨的总结 https://github.com/wangkuiyi/gotorch/wiki/Go%E8%AF%AD%E8%A8%80proc.go%E5%88%9D%E6%8E%A2