進(jìn)程堆缘、線程對(duì)比
目標(biāo)
知道進(jìn)程和線程關(guān)系及優(yōu)缺點(diǎn)
1. 功能對(duì)比
進(jìn)程娶靡,能夠完成多任務(wù)某抓,比如 在一臺(tái)電腦上能夠同時(shí)運(yùn)行多個(gè)QQ
線程漱凝,能夠完成多任務(wù)疮蹦,比如 一個(gè)QQ中的多個(gè)聊天窗口
2. 定義對(duì)比
進(jìn)程是系統(tǒng)進(jìn)行資源分配基本單位,每啟動(dòng)一個(gè)進(jìn)程操作系統(tǒng)都需要為其分配運(yùn)行資源茸炒。
線程是運(yùn)行程序中的一個(gè)執(zhí)行分支愕乎,是CPU調(diào)度基本單位。
總結(jié):進(jìn)程是操作系統(tǒng)資源分配的基本單位壁公,線程是CPU調(diào)度的基本單位
3. 關(guān)系對(duì)比
線程是依附在進(jìn)程里面的感论,沒有進(jìn)程就沒有線程
一個(gè)進(jìn)程默認(rèn)提供一條線程,進(jìn)程可以創(chuàng)建多個(gè)線程
4. 區(qū)別
進(jìn)程之間不共享全局變量
線程之間共享全局變量紊册,但是要注意資源競(jìng)爭(zhēng)的問題比肄,解決辦法: 互斥鎖或者線程同步
創(chuàng)建進(jìn)程的資源開銷要比創(chuàng)建線程的資源開銷要大
進(jìn)程是操作系統(tǒng)資源分配的基本單位,線程是CPU調(diào)度的基本單位
線程不能夠獨(dú)立執(zhí)行,必須依存在進(jìn)程中
多進(jìn)程開發(fā)比單進(jìn)程多線程開發(fā)穩(wěn)定性要強(qiáng)
優(yōu)缺點(diǎn)
多進(jìn)程:
優(yōu)點(diǎn):可以用多核
缺點(diǎn):資源開銷大
多線程:
優(yōu)點(diǎn):資源開銷小
缺點(diǎn):不能使用多核
5. 進(jìn)程的狀態(tài)
工作中芳绩,任務(wù)數(shù)往往大于cpu的核數(shù)掀亥,即一定有一些任務(wù)正在執(zhí)行,而另外一些任務(wù)在等待cpu進(jìn)行執(zhí)行示括,因此導(dǎo)致了有了不同的狀態(tài)
就緒態(tài):運(yùn)行的條件都已經(jīng)慢去铺浇,正在等在cpu執(zhí)行
執(zhí)行態(tài):cpu正在執(zhí)行其功能
等待態(tài):等待某些條件滿足痢畜,例如一個(gè)程序sleep了垛膝,此時(shí)就處于等待態(tài)
注意:創(chuàng)建子進(jìn)程其實(shí)是對(duì)主進(jìn)程進(jìn)行拷貝,進(jìn)程之間相互獨(dú)立丁稀,訪問的全局變量不是同一個(gè)吼拥,所以進(jìn)程之間不共享全局變量
主進(jìn)程會(huì)等待所有的子進(jìn)程執(zhí)行完成程序再退出
線程之間執(zhí)行是無序的
主線程會(huì)等待所有的子線程結(jié)束后才結(jié)束
現(xiàn)實(shí)生活中的公司可以理解成是一個(gè)進(jìn)程,公司提供辦公資源(電腦线衫、辦公桌椅等)凿可,真正干活的是員工,員工可以理解成線程授账。
注意:一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程,多進(jìn)程可以完成多任務(wù).
可以使用multiprocessing模塊的Queue實(shí)現(xiàn)多進(jìn)程之間的數(shù)據(jù)傳遞枯跑,Queue本身是一個(gè)消息列隊(duì)程序
從隊(duì)列取值使用get方法,向隊(duì)列放入值使用put方法