Linux学习之系统编程篇:对线程的基本认识
(1)fork()后創建的子進程是父進程的拷貝,那么pthread_create,創建線程,創建的線程跟原進程有什么關系呢?
fork 會通過拷貝產生新的虛擬地址空間(PCB 會變化),而 pthread_create 后,虛擬地址空間沒有變化,原進程退化成線程(主控線程)。 創建的子線程和主控線程共享地址空間,且各自有獨立的 PCB(由一個 PCB 變成多個,但相同)。
(2)子線程的 PCB 是從主控線程拷貝來的。
(3)子線程和主控線程共享地址空間,用戶區中除了棧區獨有,其余都共享。因此可以通過全局變量進行通信,但不可以通過局部變量進行通信。
(4)棧不共享,各線程平分棧空間,而非另外創建棧空間。
注意:
在 Linux 下,對于內核,線程就是進程 。
進程是最小的系統資源分配單位,線程是最小的執行單位。
線程號和線程 ID 的區別:一個線程 ID 可能對應多個進程號,用戶看線程 ID,內核看線程號。
查看指定線程的 LWP 號: 首先找到程序的進程 pid (ps aux | grep 關鍵字);其次 ps -Lf pid。
(5)多進程和多線程的區別
多進程始終共享的資源:代碼段.txt,文件描述符,內存映射區。
多線程始終共享的資源:堆、全局比變量。
使用多線程好處:可以更簡單的實現通信;而且可以節省資源,更合理的利用 CPU(如果有兩個 CPU,對于一個進程,只能占用一個,但創建一個線程,兩個線程就都可以跑,在內核看來,占用同樣的地址空間,但有 2 個進程在運作)。
總結
以上是生活随笔為你收集整理的Linux学习之系统编程篇:对线程的基本认识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux学习之系统编程篇:编写一个守护
- 下一篇: Linux学习之系统编程篇:创建线程函数