1. 程式人生 > >進程和線程

進程和線程

空間 線程阻塞 資源 http 優點 .cn 內核 其他 創建線程

1、線程的模型

在Windows上,線程的模型大致為:

技術分享

一個內核線程調用了多個用戶線程如果某一個用戶線程阻塞了,

導致內核線程也阻塞了,進而影響了其他線程也被阻塞了,又因為

Windows上用戶線程特別多,所以Windows的線程調度器是跑在用戶

態上的,那麽線程之間的切換就比Linux上快的多。

在Linux上線程模型大致如下:

技術分享

一個內核線程操縱一個 內核線程。所以Linux上會有200-300個線程。在Linux上

創建線程,直接就是創建內核線程,內核線程調用get_free_page會產生自己線程棧,

占兩個頁面,8k大小,默認的內核空間大小只有1G所以創建線程的數目是恒定的。

然而所有的線程都有自己的棧空間和一組寄存器包括PC寄存器。

二、進程:

操作系統分配資源的基本單位,在Linux上創建一個進程,會調用fork()函數,Linux上獨有的

寫時拷貝技術,大大的提升了創建進程的時間,Linux上0號進程就是專門提供用來寫時拷貝的init;

在Windows上會調用create_process()函數,重新創建,所以時間會稍微慢一點。

進程的必要條件:task_struct、text、獨立的用戶空間,獨立的內核空間。

內核線程:與進程相比,沒有獨立的用戶空間,用kernel_thread()創建;

用戶線程:與進程相比,用戶空間是共享的,用pthread_create()創建。

總結:Linux上調度的基本單位是進程,多線程的優點是數據共享,交互,節省

大量的時間,所以多線程不適用於Linux;Windows上調度的基本單位是線程,

線程切換快,進程只是容器用來裝載線程。

進程和線程