併發程式設計 多執行緒

2022-08-22 10:18:12 字數 2677 閱讀 8575

目錄程序是作業系統可以排程已經進行資源分配的基本單位,是乙個資源單位,其中包含了執行這個程式所需的資源

特點:系統會為每乙個程序自動建立一條執行緒,稱之為主線程, 後續通過**開啟的執行緒稱之為子執行緒

計算機是乙個工廠,程序就是乙個車間,執行緒就是車間內的流水線

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...