區分python中的進程與線程
今天整理的文章是給大家梳理Python的進程與線程的區別,沒什么代碼,希望大家能清楚知道他們的區別,什么情況用線程,什么情況用進程做到心中有數,希望大家能熟練掌握.
進程的基本概念
概念
進程就是一個程序在一個數據集上的一次動態執行過程。進程一般由程序、數據集、進程控制塊三部分組成。我們編寫的程序用來描述進程要完成哪些功能以及如何完成;數據集則是程序在執行過程中所需要使用的資源;進程控制塊用來記錄進程的外部特征,描述進程的執行變化過程,系統可以利用它來控制和管理進程,它是系統感知進程存在的唯一標志。
線程的基本概念
概念
線程是進程中執行運算的最小單位,是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有系統資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。一個線程可以創建和撤消另一個線程,同一進程中的多個線程之間可以并發執行。
好處
易于調度。 提高并發性,通過線程可方便有效地實現并發性。進程可創建多個線程來執行同一程序的不同部分。 開銷少,創建線程比創建進程要快,所需開銷很少進程的基本狀態及狀態之間的關系
狀態:運行、阻塞、掛起阻塞、就緒、掛起就緒
狀態之間的轉換:
準備就緒的進程,被CPU調度執行,變成運行態; 運行中的進程,進行I/O請求或者不能得到所請求的資源,變成阻塞態; 運行中的進程,進程執行完畢(或時間片已到),變成就緒態; 將阻塞態的進程掛起,變成掛起阻塞態,當導致進程阻塞的I/O操作在用戶重啟進程前完成(稱之為喚醒),掛起阻塞態變成掛起就緒態,當用戶在I/O操作結束之前重啟進程,掛起阻塞態變成阻塞態; 將就緒(或運行)中的進程掛起,變成掛起就緒態,當該進程恢復之后,掛起就緒態變成就緒態;進程和線程的關系:
一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程。 資源分配給進程,同一進程的所有線程共享該進程的所有資源。 處理機分給線程,即真正在處理機上運行的是線程 線程在執行過程中,需要協作同步。不同進程的線程間要利用消息通信的辦法實現同步。線程是指進程內的一個執行單元,也是進程內的可調度實體.進程與線程的區別:
運行方式不同進程不能單獨執行,它只是資源的集合。進程要操作CPU,必須要先創建一個線程。所有在同一個進程里的線程,是同享同一塊進程所占的內存空間。
關系進程中第一個線程是主線程,主線程可以創建其他線程;其他線程也可以創建線程;線程之間是平等的。進程有父進程和子進程,獨立的內存空間,唯一的標識符:pid。
速度啟動線程比啟動進程快運行線程和運行進程速度上是一樣的,沒有可比性線程共享內存空間,進程的內存是獨立的。
創建父進程生成子進程,相當于復制一份內存空間,進程之間不能直接訪問創建新線程很簡單,創建新進程需要對父進程進行一次復制一個線程可以控制和操作同級線程里的其他線程,但是進程只能操作子進程。
交互同一個進程里的線程之間可以直接訪問。兩個進程想通信必須通過一個中間代理來實現。
調度線程作為調度和分配的基本單位,進程作為擁有資源的基本單位
并發性不僅進程之間可以并發執行,同一個進程的多個線程之間也可并發執行
擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬于進程的資源.
系統開銷:在創建或撤消進程時,由于系統都要為之分配和回收資源,導致系統的開銷明顯大于創建或撤消線程時的開銷。
以上就是區分python中的進程與線程的詳細內容,更多關于python進程與線程的資料請關注好吧啦網其它相關文章!
相關文章:
