巨集觀上看是多個程式同時執行,微觀上看是多個程式分時占用cpu。這種程式的執行方式為併發執行。
方法執行時的新特徵:
間斷性:程式在比併發執行時,由於它們共享系統資源,以及為完成同一項任務而相互合作,致使在這些併發執行的程式之間形成了相互制約的關係。(當圖中c1已經資料處理完畢時,i2還沒有輸入那麼c2就得進入暫停,當使c2暫停的因素消失後(i2輸入),程式繼續執行)由此可見,相互制約將導致併發程式具有「執行—暫停—執行」這種間斷性的活動規律
失去封閉性:當系統中存在多個可以併發執行的程式時,系統中的各個資源將為它們做所共享,而這些資源的狀態也有這些程式來改變,致使在其中任一程式在執行時,其環境都必然會收到其它程式的影響。eg,當處理機已分配給某個進=程序執行時,其他的程式必須等待。
不可再現性:當程式併發執行時,由於失去了封閉性,也導致失去了不可再現性。eg,有兩個迴圈程式a,b它們共享乙個變數n。程式a每執行一次都要執行n=n+1操作,程式每執行一次都要print(n),然後把n置成0,程式ab以不同的速度執行。這樣的話會出現三種不同的結果,多以程式在併發執行時,由於失去了封閉性,其計算結果必將與併發程式的執行速有關,從而使程式失去了可再現性。
對併發執行的程式如果加以管理就能保證程式的可再現性
程式的順序執行與併發執行
是指記憶體一次只能裝載乙個程式執行,在這次程式執行結束前,其他程式不允許使用記憶體。這是早期的作業系統所使用的技術。是現代作業系統普遍使用的,它可以允許多個程式進駐記憶體,系統通過某種排程策略交替執行程式.所有多道程式設計作業系統都建立在程序的基礎上。單核cpu 單核cpu較為死腦,在通電時該cpu...
Python併發執行
使用map簡化併發的複雜度,生產者消費者模型實在看的頭疼 參考這篇帖子說明的很清楚 from multiprocessing.dummy import pool as threadpool import requests import time urls 定義網頁資源集合 for i in rang...
Go 併發執行
需要併發執行的場景有很多 爬蟲 拉取資料 更新資料 go作為天生高併發的語言,在使用併發時是比較方便的。package main import fmt func main description 開啟多執行緒執行 param total 啟動執行緒數 param work 需要執行的方法 func ...