Python線程與進程的區別

進程的基本概念

概念
進程就是一個程序在一個數據集上的一次動態執行過程。 進程通常由程序、數據集、進程控制塊三部分組成。咱們編寫的程序用來描述進程要完成哪些功能以及如何完成;數據集則是程序在執行過程當中所須要使用的資源;進程控制塊用來記錄進程的外部特徵,描述進程的執行變化過程,系統能夠利用它來控制和管理進程,它是系統感知進程存在的惟一標誌。併發

線程的基本概念

概念
線程是進程中執行運算的最小單位,是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程本身不擁有系統資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的所有資源。一個線程能夠建立和撤消另外一個線程,同一進程中的多個線程之間能夠併發執行。ide

好處高併發

  • 易於調度。
  • 提升併發性,經過線程可方便有效地實現併發性。進程可建立多個線程來執行同一程序的不一樣部分。
  • 開銷少,建立線程比建立進程要快,所需開銷不多

進程的基本狀態及狀態之間的關係
狀態:運行、阻塞、掛起阻塞、就緒、掛起就緒線程

狀態之間的轉換:代理

  1. 準備就緒的進程,被CPU調度執行,變成運行態;
  2. 運行中的進程,進行I/O請求或者不能獲得所請求的資源,變成阻塞態;
  3. 運行中的進程,進程執行完畢(或時間片已到),變成就緒態;
  4. 將阻塞態的進程掛起,變成掛起阻塞態,當致使進程阻塞的I/O操做在用戶重啓進程前完成(稱之爲喚醒),掛起阻塞態變成掛起就緒態,當用戶在I/O操做結束以前重啓進程,掛起阻塞態變成阻塞態;
  5. 將就緒(或運行)中的進程掛起,變成掛起就緒態,當該進程恢復以後,掛起就緒態變成就緒態;

進程和線程的關係:

  • 一個線程只能屬於一個進程,而一個進程能夠有多個線程,但至少有一個線程。
  • 資源分配給進程,同一進程的全部線程共享該進程的全部資源。
  • 處理機分給線程,即真正在處理機上運行的是線程
  • 線程在執行過程當中,須要協做同步。不一樣進程的線程間要利用消息通訊的辦法實現同步。線程是指進程內的一個執行單元,也是進程內的可調度實體.

###進程與線程的區別:進程

  • 運行方式不一樣內存

    • 進程不能單獨執行,它只是資源的集合。
    • 進程要操做CPU,必需要先建立一個線程。
    • 全部在同一個進程裏的線程,是同享同一塊進程所佔的內存空間。
  • 關係資源

    • 進程中第一個線程是主線程,主線程能夠建立其餘線程;其餘線程也能夠建立線程;線程之間是平等的。
    • 進程有父進程和子進程,獨立的內存空間,惟一的標識符:pid。
  • 速度同步

    • 啓動線程比啓動進程快
    • 運行線程和運行進程速度上是同樣的,沒有可比性
    • 線程共享內存空間,進程的內存是獨立的。
  • 建立it

    • 父進程生成子進程,至關於複製一分內存空間,進程之間不能直接訪問
    • 建立新線程很簡單,建立新進程須要對父進程進行一次複製
    • 一個線程能夠控制和操做同級線程裏的其餘線程,可是進程只能操做子進程。
  • 交互

    • 同一個進程裏的線程之間能夠直接訪問。
    • 兩個進程想通訊必須經過一箇中間代理來實現。
  • 調度
    • 線程做爲調度和分配的基本單位,進程做爲擁有資源的基本單位
  • 併發性
    • 不只進程之間能夠併發執行,同一個進程的多個線程之間也可併發執行
  • 擁有資源:
    • 進程是擁有資源的一個獨立單位,線程不擁有系統資源,但能夠訪問隸屬於進程的資源.
  • 系統開銷:
    • 在建立或撤消進程時,因爲系統都要爲之分配和回收資源,致使系統的開銷明顯大於建立或撤消線程時的開銷。
相關文章
相關標籤/搜索