阻塞 非阻塞 day35

2022-09-19 22:21:24 字數 1141 閱讀 9745

"""

----阻塞 非阻塞----

程式遇到了io操作,無法繼續執行**,叫做阻塞

程式沒有遇到io操作,正常執行中,就叫非阻塞

它們指的是程式的狀態

就緒 執行 阻塞

就緒和阻塞給人的感覺就是卡主了

同步 非同步

同步(呼叫/執行/任務/提交),發起任務後必須等待任務結束,拿到乙個結果才能繼續執行

非同步 發起任務後不需要關係任務的執行過程,可以繼續往下執行

非同步效率高於同步

但是並不是所有任務都可以非同步執行,判斷乙個任務是否可以非同步的條件是,任務發起方是否立即需要執行結果

同步不等於阻塞 非同步不等於非阻塞

當使用非同步方式發起任務時 任務中可能包含io操作 非同步也可能阻塞

同步提交任務 也會卡主程式 但是不等同阻塞,因為任務中可能在做一對計算任務,cpu沒走

"""# 使用執行緒池 來執行非同步任務

from concurrent.futures import

threadpoolexecutor

import

time

pool =threadpoolexecutor()

deftask(i):

time.sleep(1)

print("

sub thread run..")

i += 100

return

ifs =

for i in range(10):

f = pool.submit(task, i) #

submit就是一非同步的方式提交任務

#print(f)

#print(f.result()) # result是阻塞的 會等到這任務執行完成才繼續執行 ,會非同步變成同步

#是乙個阻塞函式,會等到池子中所有任務完成後繼續執行

pool.shutdown(wait=true)

#pool.submit(task,1) # 注意 在shutdown之後 就不能提交新任務了

for i in

fs:

print

(i.result())

print("

over

")

阻塞 非阻塞

阻塞和非阻塞指 的是在接收和傳送時是否等待動作完成才返回 舉例 阻塞 block 是指,你撥通某人 的 但是此人不在,於是你拿著 等他回來,其間不能再用 非阻塞 nonblock 是指,你撥通某人 的 但是此人不在,於是你結束通話 待會兒再打。至於到時候他回來沒有,只有打了 才知道。即所謂的 輪詢 ...

阻塞非阻塞

阻塞和非阻塞 阻塞 可用在assign語句和always語句中,表示只要源訊號發生變化,目標訊號就立刻完成賦值操作,在always塊中,結果與語句順序有關,在always塊中是順序關係 非阻塞 只能用在always語句中,表示該語句結束時完成賦值操作,結果與語句順序無關,並行關係 可以這樣理解 阻塞...

阻塞 非阻塞 select epoll

著作權歸作者所有。首先我們來定義流的概念,乙個流可以是檔案,socket,pipe等等可以進行i o操作的核心物件。不管是檔案,還是套接字,還是管道,我們都可以把他們看作流。之後我們來討論i o的操作,通過read,我們可以從流中讀入資料 通過write,我們可以往流寫入資料。現在假定乙個情形,我們...