"""----阻塞 非阻塞----
程式遇到了io操作,無法繼續執行**,叫做阻塞
程式沒有遇到io操作,正常執行中,就叫非阻塞
它們指的是程式的狀態
就緒 執行 阻塞
就緒和阻塞給人的感覺就是卡主了
同步 非同步
同步(呼叫/執行/任務/提交),發起任務後必須等待任務結束,拿到乙個結果才能繼續執行
非同步 發起任務後不需要關係任務的執行過程,可以繼續往下執行
非同步效率高於同步
但是並不是所有任務都可以非同步執行,判斷乙個任務是否可以非同步的條件是,任務發起方是否立即需要執行結果
同步不等於阻塞 非同步不等於非阻塞
當使用非同步方式發起任務時 任務中可能包含io操作 非同步也可能阻塞
同步提交任務 也會卡主程式 但是不等同阻塞,因為任務中可能在做一對計算任務,cpu沒走
"""# 使用執行緒池 來執行非同步任務
from concurrent.futures importthreadpoolexecutor
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:
(i.result())
print("
over
")
阻塞 非阻塞
阻塞和非阻塞指 的是在接收和傳送時是否等待動作完成才返回 舉例 阻塞 block 是指,你撥通某人 的 但是此人不在,於是你拿著 等他回來,其間不能再用 非阻塞 nonblock 是指,你撥通某人 的 但是此人不在,於是你結束通話 待會兒再打。至於到時候他回來沒有,只有打了 才知道。即所謂的 輪詢 ...
阻塞非阻塞
阻塞和非阻塞 阻塞 可用在assign語句和always語句中,表示只要源訊號發生變化,目標訊號就立刻完成賦值操作,在always塊中,結果與語句順序有關,在always塊中是順序關係 非阻塞 只能用在always語句中,表示該語句結束時完成賦值操作,結果與語句順序無關,並行關係 可以這樣理解 阻塞...
阻塞 非阻塞 select epoll
著作權歸作者所有。首先我們來定義流的概念,乙個流可以是檔案,socket,pipe等等可以進行i o操作的核心物件。不管是檔案,還是套接字,還是管道,我們都可以把他們看作流。之後我們來討論i o的操作,通過read,我們可以從流中讀入資料 通過write,我們可以往流寫入資料。現在假定乙個情形,我們...