目錄
# 程序:程序即正在執行的乙個過程。程序是對正在執行程式的乙個抽象。
# 將應用程式對硬體資源的靜態請求變得有序化
'''併發:看起來是同時執行的
並行:真正做到了同時執行
多道技術(了解):
空間復用:共用乙個記憶體條,每乙個程序都有自己獨立的記憶體空間,互不干擾,物理級別的隔離
時間復用:共用乙個cpu
cpu切換(掌握)
io的時候,占用時間過長切換
'''# 現代計算機:
'''現在的主機一般是多核,那麼每個核都會利用多道技術
有4個cpu,執行於cpu1的某個程式遇到io阻塞,會等到io結束再重新排程,會被排程到4個
cpu中的任意乙個,具體由作業系統排程演算法決定
'''# 併發:切換+儲存狀態
# 坑# 開啟子程序:把父程序的**完整複製到乙個新的記憶體空間裡去執行
x = 1
def task():
print(x)
# multiprocessing模組用來開啟子程序,並在子程序中執行我們定製的任務(比如函式),該模組與多執行緒模組threading的程式設計介面類似。
from multiprocessing import process
import time
def task():
print('程序 start')
time.sleep(2)
print('程序 end')
if __name__ == '__main__': # 在windows中process()必須放到if name == 'main':下
p = process(target=task)
p.start() # 告訴作業系統我要開子程序,告訴完了這行**就算執行完了,接著往下走,具體作業系統什麼時候開子程序,開多長時間跟你沒關係
time.sleep(5)
print('主程序/父程序')
# 開啟多個子程序
from multiprocessing import process
import time
def task(x): # 需要使用關鍵字的方式來指定引數
print(f'子程序 start')
time.sleep(2)
print(f'子程序 end')
if __name__ == '__main__':
p = process(target=task,args=('rocky',)) # 例項化得到的物件,表示乙個子程序中的任務(尚未啟動)
p2 = process(target=task,args=('nick',)) # args指定的為傳給target函式的位置引數,是乙個元組形式,必須有逗號
p.start()
p2.start()
time.sleep(5)
print('主程序')
from multiprocessing import process
import time
class test(process):
def __init__(self,name): # 如果不傳參沒必要重寫init
super().__init__()
self.name = name
def run(self):
print(f'子程序 start')
time.sleep(2)
print('子程序 end')
if __name__ == '__main__':
p = test('ys')
p.start() # 向作業系統傳送開啟子程序的請求
print('主程序')
from multiprocessing import process
import time
x = 0
def task():
global x # 子程序修改的是自己的命名空間裡的x,與主程序無關。
x = 100
print(f'子程序的x修改為了')
if __name__ == '__main__':
p = process(target=task)
p.start()
time.sleep(5)
print(x)
from multiprocessing import process
import time
def task():
print('程序 start')
time.sleep(2)
print('程序 end')
if __name__ == '__main__':
p = process(target=task)
p2 = process(target=task)
p.start()
p2.start()
print('主程序')
'主程序在等待所有的子程序結束'
併發程式設計1
1 程序與程式 程序 正在執行的乙個過程。程序是對正在執行程式的乙個抽象 程式 是由程式設計師將自己的思維邏輯按照某種程式語言規範編寫下來的一堆字串,最終形成的一堆檔案 程序是由程式產生的,沒有程式就沒有程序 2 作業系統與程序 應用程式無法直接執行在硬體之上,一定要借助作業系統 所以程序是由作業系...
go 併發程式設計 1
優雅的併發程式設計正規化,完善的併發支援,出色的併發效能是go語言區別於其他語言的一大特色.1.併發基礎 win和linux 出現之前,程式設計師並沒有併發的概念.因為命令式程式語言是以序列為基礎的,程式會順序執行每條指令,整個過程只有乙個上下文,即乙個呼叫棧,乙個堆.併發則意味著程式在執行時有多個...
JAVA併發1 併發程式設計的挑戰
乙個cpu同一時刻只能執行乙個執行緒 cpu 通過給每個執行緒分配一定的時間片,時間片非常短,通常是幾十毫秒,來不停的切換執行緒執行任務,達到了多執行緒的效果。當執行緒用完自己的時間片後,及時任務還沒有完成,作業系統也會剝奪它的執行權,讓另一條執行緒執行。當一條執行緒的時間片用完後,作業系統會暫停該...