簡體   English   中英

我怎樣才能“真正”理解進程和線程?

[英]How can I "really" understand processes and threads?

我試圖“真正”理解進程和線程——我讀過關於它們的書籍和文章,但總體情況似乎總是缺少一些東西。 當然,我可以談論細節,例如每個進程如何擁有自己的內存空間以及屬於同一進程的線程如何共享相同的內存空間等,但我想從操作系統和內存的角度尋找東西 - 例如:

  1. 如何生成它們以及內存中究竟發生了什么。
  2. 在 IPC 和線程間通信期間會發生什么。
  3. 如何在多核系統上處理它們。
  4. 代碼中的上下文是如何確定的? (即,函數如何屬於進程/線程)。 {希望這很清楚!!!!}

所有這些與簡單的代碼示例一起會很棒。 非常感謝。

進程將代碼與執行它所需的所有資源(內存、打開的文件、共享內存)封裝在一起。 一個線程只是一個進程中的一個執行,這大致意味着一個指向線程當前指令的指針和一個調用堆棧。 一個進程至少包含一個線程,但一個進程中可能有多個線程。

  1. 生成進程是操作系統的問題,這可能非常不同。 Unix 傳統上提供允許進程克隆自身的fork (幾乎所有內容都是重復的)。 生成線程既是語言問題,也是操作系統問題(存在從語言線程到操作系統線程的映射)。 C API 包含pthread_create ,它只是為其分配一個新堆棧並初始化指向要運行的某個函數地址的指令指針。
  2. 沒什么特別的...線程間通信很容易,因為它們共享相同的地址空間,但要注意並發是一個問題。
  3. 一切皆有可能:從一個進程及其在同一核心上的所有線程,到分布在一組核心上並沿運行移動的線程。
  4. 沒有屬於線程的函數。 線程從執行某個函數開始,並在其調用堆棧為空(從該初始調用返回)時終止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM