輕量級進程和普通進程的區別在於:
前者沒有獨立的用戶空間(內核態線程無用戶空間,用戶態線程共享用戶空間),而普通進程有獨立的內存空間;
表現在數據結構上:線程的mm=null或者與其他線程共享,而進程有獨立的mm_struct。
內核線程
內核線程只運行在內核態,不受用戶態上下文的拖累。
Ø 處理器競爭:可以在全系統范圍內競爭處理器資源;
Ø 使用資源:唯一使用的資源是內核棧和上下文切換時保持寄存器的空間
Ø 調度:調度的開銷可能和進程自身差不多昂貴
Ø 同步效率:資源的同步和數據共享比整個進程的數據同步和共享要低一些。
輕量級進程
輕量級進程(LWP)是建立在內核之上並由內核支持的用戶線程,它是內核線程的高度抽象,每一個輕量級進程都與一個特定的內核線程關聯。內核線程只能由內核管理並像普通進程一樣被調度。
輕量級進程由clone()系統調用創建,參數是CLONE_VM,即與父進程是共享進程地址空間和系統資源。
與普通進程區別:LWP只有一個最小的執行上下文和調度程序所需的統計信息。
Ø 處理器競爭:因與特定內核線程關聯,因此可以在全系統范圍內競爭處理器資源
Ø 使用資源:與父進程共享進程地址空間
Ø 調度:像普通進程一樣調度
用戶線程
用戶線程是完全建立在用戶空間的線程庫,用戶線程的創建、調度、同步和銷毀全又庫函數在用戶空間完成,不需要內核的幫助。因此這種線程是極其低消耗和高效的。
Ø 處理器競爭:單純的用戶線程是建立在用戶空間,其對內核是透明的,因此其所屬進程單獨參與處理器的競爭,而進程的所有線程參與競爭該進程的資源。
Ø 使用資源:與所屬進程共享進程地址空間和系統資源。
Ø 調度:由在用戶空間實現的線程庫,在所屬進程內進行調度