操作系統線程基本概念


  1、什么是線程?

  簡單來說,我們知道一個進程就是一段程序的執行,但是一段程序可以實現很多功能,而我們可以簡單的認為,每一個功能就是一個線程,線程就是進程內執行的任務。一個進程內部可以有很多的線程。線程是CPU使用的基本單元,它由線程ID、程序計數器、寄存器集合和棧組成。它與屬於同一進程的其他線程共享代碼段、數據段和其他操作系統資源。

  2、多線程的優點;

  (1)響應度高:如果對一個交互程序采用多線程,即使有部分線程阻塞或執行冗長的操作,該程序也能繼續執行,從而增加對用戶的相應程度

  (2)資源共享:多線程默認共享他們所屬進程的內存和資源

  (3)經濟:進程創建所需要的內存和資源的分配比較昂貴,由於線程能夠共享他們的進程的資源,所以創建線程比進程經濟;

  (4)多處理器體系結構的利用:多線程的優點是充分利用多處理器體系結構,以便每個進程能夠並行運行在不同的處理器上。

  3、多線程的模型:

  有兩種不同的方式來提供線程支持:用戶層的用戶線程和內核層的內核線程,根絕內核線程和用戶線程的對應關系,多線程的模型可以分為三種:

  (1)多對一模型:

  就是將多用戶線程映射到一個內核線程,線程管理是在用戶空間進行的,因而效率比較高,但是如果一個線程阻塞,那么整個進程就會阻塞,因為任意時刻只有一個線程訪問內核,所以多個線程並不能運行在多處理器上;

  (2)一對一模型:

  將每個用戶線程映射到一個內核線程上,該模型在一個線程執行阻塞系統調用時,能允許另一個線程繼續執行,所以效率比多對一模型高;

  (3)多對多模型:

  允許多個用戶線程復用一個內核線程,也允許一個用戶線程專用一個內核線程,這稱為“二級模型”,效率比上面兩種模型都高,但是相對的,實現也更加困難。

  4、多線程的問題:

  (1)fork()和exec()函數問題

  unix系統有兩種形式的fork(),一種是復制所有的線程,另外一種是只復制調用了系統fork()函數的線程。

  調用了exec()函數之后,exec()參數指定的程序會替換整個進程。

  (2)線程取消:

  要取消的線程我們成為目標線程,主要由兩種方式:

  (1)異步取消:一個線程立即終止目標線程

  (2)延遲取消:目標線程不斷檢查它是都應終止,這允許目標線程有機會以有序方式來終止自己。

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM