目錄程序是作業系統可以排程已經進行資源分配的基本單位,是乙個資源單位,其中包含了執行這個程式所需的資源
特點:系統會為每乙個程序自動建立一條執行緒,稱之為主線程, 後續通過**開啟的執行緒稱之為子執行緒
計算機是乙個工廠,程序就是乙個車間,執行緒就是車間內的流水線
item
程序執行緒
單位資源單位
執行單位
建立開銷
開銷大開銷小
記憶體關係
記憶體相互隔離
共享程序內的所有資源
硬體資源
競爭關係
協作關係
層級關係
又上下層關係
平等關係
有多個任務要併發處理
當要併發處理的任務有很多的時,不能使用程序 程序資源開銷太大 執行緒開銷非常小 適用於任務數非常多的情況
方式一:直接例項化thread類
from threading import thread
def task():
print("子執行緒 run")
# 與程序不同之處1 不需要加判斷 開啟執行緒的**放**都可以
t = thread(target=task)
t.start()
print("over")
方式二:繼承thread類,覆蓋run方法
class mythread(thread):
def run(self):
# 把要在子線中執行的**放入run中
print("子 run")
mt = mythread()
mt.start()
print("over")
只要併發訪問了同一資源一定會產生安全問題,解決方案和多程序一致,就是給操作公共資源**加鎖
from threading import thread,lock
import time
a = 10
l = lock()
def task():
global a
l.acquire()
temp = a
time.sleep(0.1)
a = temp - 1
l.release()
ts =
for i in range(10):
t = thread(target=task)
t.start()
for t in ts:
t.join()
print(a)
乙個執行緒a,設定為b的守護執行緒, a會隨著b的結束而結束
預設情況下,主線程即使**執行完畢,也會等待所有非守護執行緒完畢後程式才能結束 ,因為多個執行緒之間是協作關係
from threading import thread
import time
# 妃子的一生
def task():
print("妃子 start")
time.sleep(5)
print("妃子 over")
def task2():
print("皇太后 start")
time.sleep(3)
print("皇太后 over")
# 皇帝的一生
print("主 start")
t = thread(target=task) # 守護執行緒,主線程結束就結束
t.daemon = true
t.start()
t2 = thread(target=task2) # 非守護執行緒,主線程會等待非守護執行緒結束後再結束
t2.start()
print("主 over")
"""結果
主 start
妃子start
皇太后 start
主over
皇太后 over
"""
from threading import thread,currentthread,enumerate,activecount
import time
# t = thread()
# t.start()
# t.join()
# t.is_alive() # 判斷執行緒是否開啟
# t.isalive() # 判斷執行緒是否開啟
# t.ident # 執行緒識別符號 id
# t.daemon
# 獲取當前執行緒物件
# print(currentthread())
# t = thread(target=lambda :print(currentthread()))
# t.start()
t = thread(target=lambda :time.sleep(1))
t.start()
t = thread(target=lambda :time.sleep(1))
t.start()
t.join()
# 獲取正在執行的所有執行緒物件 是乙個列表
print(enumerate())
# 存活的執行緒數量
print(activecount())
多執行緒併發程式設計
docker 可謂是開啟了容器化技術的新時代,現在無論大中小公司基本上都對容器化技術有不同程度的嘗試,或是已經進行了大量容器化的改造。伴隨著 kubernetes 和 cloud native 等技術和理念的普及,也大大增加了業務容器化需求。而這一切的推進,不可避免的技術之一便是構建容器映象。在本場...
多執行緒併發程式設計
程序是乙個執行的程式,程序裡面有多個執行緒,執行緒是程序中負責執行的程式的一執行單元,執行緒本身是依靠程式進行執行的,執行緒是程式中乙個順序控制流。執行緒分為單執行緒和多執行緒。多執行緒能更好利用cpu資源。以前單程序的,時間片切換 多執行緒實現方式 繼承thread,實現runnable。exec...
boost併發程式設計 多執行緒
原子操作,基本都包含我們三個方面所關心的語義 操作本身是不可分割的 atomicity 乙個執行緒對某個資料的操作何時對另外乙個執行緒可見 visibility 執行的順序是否可以被重排 ordering include include include using namespace std usi...