日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线程基础知识

發布時間:2023/11/30 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程基础知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是線程

LWP:light weight process 輕量級的進程,本質仍是進程(在Linux環境下)

?????? 進程:獨立地址空間,擁有PCB

?????? 線程:也有PCB,但沒有獨立的地址空間(共享)

?????? 區別:在于是否共享地址空間。????? 獨居(進程);合租(線程)。

?????? Linux下:???? 線程:最小的執行單位

????????????? ???????????? 進程:最小分配資源單位,可看成是只有一個線程的進程。

?

Linux內核線程實現原理

類Unix系統中,早期是沒有“線程”概念的,80年代才引入,借助進程機制實現出了線程的概念。因此在這類系統中,進程和線程關系密切。

1. 輕量級進程(light-weight process),也有PCB,創建線程使用的底層函數和進程一樣,都是clone

2. 從內核里看進程和線程是一樣的,都有各自不同的PCB,但是PCB中指向內存資源的三級頁表是相同的

3. 進程可以蛻變成線程

4. 線程可看做寄存器和棧的集合

5. 在linux下,線程最是小的執行單位;進程是最小的分配資源單位

察看LWP號:ps –Lf pid 查看指定線程的lwp號。

?

三級映射:進程PCB --> 頁目錄(可看成數組,首地址位于PCB中) --> 頁表 --> 物理頁面 --> 內存單元

參考:《Linux內核源代碼情景分析》 ----毛德操

對于進程來說,相同的地址(同一個虛擬地址)在不同的進程中,反復使用而不沖突。原因是他們雖虛擬址一樣,但,頁目錄、頁表、物理頁面各不相同。相同的虛擬址,映射到不同的物理頁面內存單元,最終訪問不同的物理頁面。

但!線程不同!兩個線程具有各自獨立的PCB,但共享同一個頁目錄,也就共享同一個頁表和物理頁面。所以兩個PCB共享一個地址空間。

?????? 實際上,無論是創建進程的fork,還是創建線程的pthread_create,底層實現都是調用同一個內核函數clone。

?????? 如果復制對方的地址空間,那么就產出一個“進程”;如果共享對方的地址空間,就產生一個“線程”。

?????? 因此:Linux內核是不區分進程和線程的。只在用戶層面上進行區分。所以,線程所有操作函數 pthread_* 是庫函數,而非系統調用。

線程共享資源

?????? 1.文件描述符表

?????? 2.每種信號的處理方式

?????? 3.當前工作目錄

?????? 4.用戶ID和組ID

?????? 5.內存地址空間 (.text/.data/.bss/heap/共享庫)

?

線程非共享資源

?????? 1.線程id

?????? 2.處理器現場和棧指針(內核棧)

?????? 3.獨立的棧空間(用戶空間棧)

?????? 4.errno變量

?????? 5.信號屏蔽字

?????? 6.調度優先級

線程優、缺點

?????? 優點:?? 1. 提高程序并發性????? 2. 開銷小????? 3. 數據通信、共享數據方便

?????? 缺點:?? 1. 庫函數,不穩定????? 2. 調試、編寫困難、gdb不支持????? 3. 對信號支持不好

?????? 優點相對突出,缺點均不是硬傷。Linux下由于實現方法導致進程、線程差別不是很大。

?

轉載于:https://www.cnblogs.com/wanghao-boke/p/11352278.html

總結

以上是生活随笔為你收集整理的线程基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。