而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難度較大。