go并发的各种坑
使用关键字“Golang paper”搜索意外发现一篇排名很靠前的论文"Understanding Real-World Concurrency Bugs in Go", 其观点大意是,channel的使用存在各种坑,比如goroutine leaks。
主流开发人员还是更习惯传统的共享内存模式,基础库也多是基于对象共享来写的,传统mutex锁的代码还是占了绝大多数,所以锁死的情况还继续存在。同时,因为对go新引入channel的使用特性理解的不够深入,又带来了新的deadlock。
并发引发的bug往往隐藏很深,可能运行了很久都不会出现。一旦发现并定位了,很多bug的修改并不困难,也就几行代码的事。不过,因为gorouting创建的便携性,以及go语言的极简带来的代码冗余,一个不小心就会埋雷,防不胜防。