一個(gè)線程只能有一個(gè)進(jìn)程栅屏,一個(gè)進(jìn)程里面可以包括多個(gè)線程茵休。
python在執(zhí)行的線程是主線程窖逗。
大部分計(jì)算機(jī)中的應(yīng)用程序的執(zhí)行累奈,一般都是并發(fā)執(zhí)行機(jī)制的多任務(wù)處理機(jī)制
并發(fā)就是 同時(shí)接到多個(gè)任務(wù)斥铺,同時(shí)執(zhí)行多個(gè)任務(wù)彻桃,但是在某一個(gè)時(shí)間段只執(zhí)行一個(gè)任務(wù)
cpython官方解釋器內(nèi)置gil 全局解釋器鎖 同一時(shí)間只能執(zhí)行一個(gè)線程
對(duì)于新手來說 一般使用 threading模塊
join:線程的 join 狀態(tài)是獨(dú)占模式,當(dāng)前線程獨(dú)占 CPU 運(yùn)行單元晾蜘,
必須等待當(dāng)前線程執(zhí)行完成或者超時(shí)之后邻眷,才能運(yùn)行其他線程
python 中提供了兩種線程鎖的操作
同步鎖/互斥鎖:Lock
可重用鎖:RLock
鎖的操作主要是獲取鎖和釋放鎖兩種
acquire() 獲取鎖,上鎖剔交,鎖定
release() 釋放鎖肆饶,開鎖,解鎖
線程鎖固然功能強(qiáng)大岖常,可以管理多個(gè)線程之間的共享數(shù)據(jù)問題
但是同時(shí)它的強(qiáng)大也帶來了比較糾結(jié)的問題驯镊,需要開發(fā)人員對(duì)于鎖定的數(shù)據(jù)有一個(gè)良好的認(rèn)
知,否則特別容易造成死鎖的現(xiàn)象
碰到死鎖并不是程序出錯(cuò) 可以嘗試使用 可重用鎖