筆記--什麼是協程

在瞭解協程之前,我們先來複習下進程和線程:

1.進程:就是應用程序啓動的實例。比如我們運行一個遊戲,打開一個軟件,就是開啓了一個進程。

進程擁有代碼和打開的文件資源、數據資源、獨立的內存空間。

2.線程:線程從屬於進程,是程序的實際執行者。一個進程至少包含一個主線程,也可以有更多的子線程。

線程擁有自己的棧空間。

3.對操作系統來說,線程是最小的執行單元,進程是最小的資源管理單元。無論是進程還是線程,都是由操作系統進行管理的。

4.線程的五種狀態:初始化、可運行、運行中、阻塞、銷燬

線程不同狀態之間的轉化是誰來實現的呢?是JVM嗎?並不是。JVM需要通過操作系統內核中的TCB(Thread Control Block)模塊來改變線程的狀態,這一過程需要耗費一定的CPU資源。

5.進程和線程的痛點:

1)涉及到同步鎖。

2)涉及到線程阻塞狀態和可運行狀態之間的切換

3)實際到線程上下文的切換

以上涉及到的任何一點,都是非常耗費性能的操作,這時候協程就要登場了 。

6.什麼是協程?

協程,英文Coroutines,是一種比線程更加輕量級的存在。正如一個進程可以擁有多個線程一樣,一個線程也可以擁有多個協程。最重要的是,協程不是被操作系統內核所管理,而完全是由程序所控制(也就是在用戶態執行)。這樣帶來的好處就是性能得到了很大的提升,不會像線程切換那樣消耗資源。

但是Java中並沒有對協程的原生支持,可以查看開源框架Kilim進行模擬。

 

引用文章地址:https://mp.weixin.qq.com/s/57IERpGIlvRwYCh6vSbMDA

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章