作業系統
阻塞和非阻塞
非阻塞:程序只會在就緒和 執行狀態中切換
程序三狀態:就緒 執行 阻塞
併發並行
子程序和主程序
多併發的tcp服務端
程序是作業系統中最小的資源分配單位
程序process 開啟子程序
join控制子程序
守護程序 daemon
鎖同步控制
訊號量 機制:計數器+鎖實現的 semaphore
事件 event
控制這個屬性的值
程序之間的通訊(ipc)
佇列是基於管道 + 鎖 實現的
管道(pipe)是基於socket,pickle實現的
def consume(q):
print('son-->',q.get())
q.put('abc')
if __name__ == '__main__':
q = queue()
p = process(target=consume,args=(q,))
p.start()
q.put()
p.join()
print('foo-->',q.get())
簡單的生產消費模型
def consume(q):
print('son-->',q.get())
q.put('abc')
if __name__ == '__main__':
q = queue()
p = process(target=consume,args=(q,))
p.start()
q.put()
p.join()
print('foo-->',q.get())
相同的原理 joinablequeue
管道 程序之間資料不安全 且訪問資料複雜
程序池(pool) multiprocessing起程序池
有返回值的情況下
- ```python
import os
import time
from multiprocessing import pool
def task(num):
time.sleep(1)
print("%s: %s"%(num,os.getpid()))
return num **2
if __name__ == '__main__':
p = pool(4)
for i in range(20):
p.close()
p.join()
#輸出結果同時四個認識執行
```- 3.map()方法
- 非同步提交的簡化版本
- 自帶close和join方法
- 直接拿到返回值的可迭代物件
- 迴圈可以拿到返回值
程序池-----**函式
網路程式設計基礎 併發程式設計 多程序
python中的多執行緒無法利用多核優勢,如果想要充分地使用多核cpu的資源 os.cpu count 檢視 在python中大部分情況需要使用多程序。python提供了multiprocessing multiprocessing模組用來開啟子程序,並在子程序中執行我們定製的任務 比如函式 該模組...
python 併發程式設計基礎之 程序
目錄多道技術 基於單核情況下研究 併發與並行 程序程序的三個狀態 同步和非同步 建立程序的兩種方式 乙個計算機機房,一次只能被乙個卡片使用。缺點 cpu利用率最低。支援多使用者去使用乙個計算機機房。高速磁碟 提高檔案的讀取速度。優點 提高cpu的利用率 多個程式使用cpu時是序列。必須讓乙個程式結束...
python併發程式設計 程序,併發
1.程序是乙個正在執行的程式,或者說是程式執行的過程,程序是個抽象概念 程序起源於作業系統,是作業系統最核心的概念,作業系統所有其他的概念都是圍繞程序展開 研究程序最底層就是在研究作業系統底層 2.序列 程序 乙個任務完完整整的執行完畢後,在執行下乙個任務 3.併發 程序 看起來多個任務是同時執行即...