《深入理解Linux核心3rd》學習筆記——進程線程概念

來源:互聯網
上載者:User

  本人比較熟悉Windows下的系統級和NT核心程式的開發,這裡結合Windows中進程線程的概念與Linux中的進程線程作一個比較。

進程

  在Linux和Windows中,對於進程這個概念基本一致,即程式啟動並執行一個執行個體,代表了一組資源。

  在Linux中,還有一個“輕量級進程”(LWP)的概念,引入這個概念是為了對多線程程式提供更好的支援(下文會討論)。

 

使用者線程

  對於使用者線程(簡稱線程。注,這裡僅僅指的是多線程應用程式中的線程,不是核心線程),Linux和Windows表現的就不一致了。在Windows中,線程都是由核心實現的,即線程的建立、執行、調度、銷毀都需要核心的參與;在傳早期的Linux中,線程的所有行為在OS核心看來都是由在使用者態實現的,即核心不參與這些過程。在Windows中,核心自動地對線程進行調度;在早期Linux中,線程的調度必須在使用者模式下實現,這點類似於Windows中的纖程。因此,早期的Linux系統中的多線程程式中,只要有一個線程阻塞,那麼整個進程也就阻塞了,多個線程之間無法並發。

  Linux中的使用者線程不需要核心的支援,其建立、執行、調度和銷毀僅工作在使用者模式,這種工作是非常高效且低消耗的。但其缺點是各線程之間無法並發。

 

核心線程

  Windows和現代的Linux作業系統的核心都是多線程核心(即支援多線程的核心)。核心線程在Windows和Linux系統中表現的也基本一致,由核心參與線程的建立、執行、調度、銷毀等工作,多個核心線程之間能夠並發,相當於核心的多個影子,每個影子可以完成不同的事情。核心線程的使用是廉價的。

 

輕量級進程(LWP)

  這是Linux中特有的概念。Linux為了對多線程程式提供更好地支援,現代的Linux系統中引入了“輕量級進程”(LWP)的概念,它是基於核心線程的高度抽象。實際上每個LWP都需要核心線程的支援。因此,每個LWP可以被核心獨立調度,多個LWP之間能夠並發。

  LWP有局限性。大多數LWP的建立、執行、調度和銷毀,都需要進行系統調用,系統調用需要在使用者模式和核心模式中切換,代價高。另外,每個LWP都需要有一個核心線程支援,因此LWP要消耗核心資源(如核心線程的棧空間)。

 

使用者線程和LWP的結合

  引入LWP之後,就可以對使用者線程進行最佳化,讓一個或多個使用者線程與一個LWP關聯,這樣一來,LWP就為使用者線程和核心線程架起了一座橋樑,使用者線程就可以藉助於LWP之間的並發來間接地實現使用者線程之間的並發。

  要注意的是,使用者線程與LWP關聯可以是一對一,也可以是多對一的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.