而Go等语言是在语言层面实现协程的,所以可以达到轻量级实现,在我们深入理解不用级别线程之前,关于用户线程(User Thread)和系统线程(Kernel Thread), 可以参考文章:用户线程 VS 系统线程
另一个额外可能要提出的点就是:通常我们知道线程是操作系统可以操作的最小单元,但是更近一步说,还有另外两点需要进一步理解:Java中的Thread是对系统/内核线程(Kernel Thread)的一种abstraction,而系统线程则是按顺序执行的计算机指令序列(A thread is a sequence of computer instructions executed sequentially.)-->这能帮我们进一步理解其系统瓶颈在哪儿:当我们在操作系统中完成一件事,不仅仅是计算(calculation),还涉及到IO网卡数据交互(IO wait),时间暂停(time wait),从内核汇流排同步数据(synchreonize/volatile)等等操作。
2018.10月,Kotlin 1.3 版本已经从语法层面正式支持Kotlin协程conroutine,其可以和Java相互转换的特性可以让我们在stable版本尝试到协程带来的好处,和Java的切换也很无缝,IntelliJ已经天然支持自动转换。不过介于目前大部分Java开发对于kotlin语言还是不够熟悉,可能从Java切换到Kotlin难度较大。