App下載

能否解釋下什么是進程、線程、協程,他們之間的關系是怎樣的?

享受養(yǎng)生的年輕人 2021-12-15 14:24:51 瀏覽數 (2381)
反饋

進程: 本質上是一個獨立執(zhí)行的程序,進程是操作系統(tǒng)進行資源分配和調度的基本概念,操作系統(tǒng)進行資源分配和調度的一個獨立單位。


線程: 是操作系統(tǒng)能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一個進程中可以并發(fā)多個線程,每條線程執(zhí)行不同的任務,切換受系統(tǒng)控制。


協程:  又稱為微線程,是一種用戶態(tài)的輕量級線程,協程不像線程和進程需要進行系統(tǒng)內核上的上下文切換,協程的上下文切換是由用戶自己決定的,有自己的上下文,所以說是輕量級的線程,也稱之為用戶級別的線程就叫協程,一個線程可以多個協程,線程進程都是同步機制,而協程則是異步Java的原生語法中并沒有實現協程,目前python、Lua和GO等語言支持。


關系:一個進程可以有多個線程,它允許計算機同時運行兩個或多個程序。線程是進程的最小執(zhí)行單位,CPU
的調度切換的是進程和線程,進程和線程多了之后調度會消耗大量的CPU,CPU上真正運行的是線程,線程可
以對應多個協程。


協程對于多線程有什么優(yōu)缺點嗎?

優(yōu)點:
非??焖俚纳舷挛那袚Q,不用系統(tǒng)內核的上下文切換,減小開銷。
單線程即可實現高并發(fā),單核CPU可以支持上萬的協程。
由于只有一個線程,也不存在同時寫變量的沖突,在協程中控制共享資源不需要加鎖。


缺點:
協程無法利用多核資源,本質也是個單線程。
協程需要和進程配合才能運行在多CPU上。
目前java沒成熟的第三方庫,存在風險。
調試debug存在難度,不利于發(fā)現問題。


0 人點贊