程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 為何需要創建線程,創建線程

為何需要創建線程,創建線程

編輯:C#入門知識

為何需要創建線程,創建線程


個人以為是為了提高CPU利用率。線程給操作系統帶來的創建維護和管理負擔要輕。因為與線程相關的信息比較少,交情的負擔意味著線程的代價或開銷比較少。當處理器除一個進程並激活另一個進程時,就要發生上下文切換。為了發生上下文切換,操作系統必須啟動和重新啟動每個進程所需的信息。這就意味著必須保存描述進程存在狀態的有關信息,在進程再次激活時,就可以從離開的地點繼續執行。那麼系統在進程切換時需要保存那些信息呢?下面一一列舉

1、所需信息包括可執行程序、堆棧、以及靜態與動態分配變量內存的指針。

2、寄存器組中包含執行下一條指令的指針這樣的信息 。

3、重新任命進程時需要進程的狀態(進程是被掛起還是被阻塞)和優先權。同時程序的I/O狀態也被保存。

4、保存進程的規劃信息,內存管理信息以及計數信息。

5、進程需要文件描述器和讀寫指針來繼續使用資源。

而線程同樣需要上下文。當線程被搶先時同樣也會發生上下文切換。

與進程相比線程的優勢如下:

1、線程不需要地址空間。線程包含在進程的地址空間中。(所以在重新任命進程時所需的線程都不需要)

2、線程的上下文只包含一個堆棧、一個寄存器組和一個優先權。

3、寄存器組包含程序或指令指針以及堆棧指針。

4、線程的文本包含在他的進程的文本中。

5、進程擁有的所有資源都屬於線程。所以與資源相關的所有信息不是線程上下文的部分。

6、其他信息如規劃、計數等都是由進程所定義。無需包含在線程的上下文中。

線程與進程的相同之處是:都有ID,寄存器組、狀態、以及優先權。線程與子進程共享父進程的資源。

他們的不同之處是:

1、線程沒有自己的地址空間,如果進程創建了多個所有的線程都將包含在他的地址空間中。

2、父進程和子進程之間必須通過進程間通信機制來進行通信。而進程中的多個線程之間是通過讀取和寫入數據到進程變量來通信。

3、子進程對其他子進程不施加控制,而進程的線程被看做同位體(peer)並對進程的其他的線程施加控制。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved