python之併發程式設計 理論部分

2022-10-10 09:06:11 字數 4733 閱讀 7622

管理控制協調計算機中硬體與軟體的關係.

作業系統的作用?

第乙個作用: :隱藏了醜陋的硬體呼叫介面,為應用程式設計師提供呼叫硬體資源的更好,更簡單,更清晰的模型(系統呼叫介面)

第二個作用: 將應用程式對硬體資源的靜態請求變得有序化

阻塞: input read write sleep recv accept sendto recvfrom .....

最早出現的計算機: 算盤.

電子類的計算機發展史:

在大學裡出現了機房,想使用計算機必須預約.

先連線調配各個硬體,1.5小時, 真空管, 然後在插上程式除錯.效率低.

優點: 個人獨享整個計算機資源.

缺點:

1. 硬體除錯插線,耗時

2. 所有人都是序列執行.

優點: 

程式設計師不用親自對硬體進行插線操控,效率提高.

可以進行批量處理**.

缺點:程式設計師不能獨自使用計算機.

你的所有程式還是序列.

大背景:

1.積體電路: 把所用的硬體變小,線路板.

2.將兩套不同的生產線合併成一條生產線.

技術上的更新:多道技術.

1. 空間上的復用:

將記憶體分區域,乙個記憶體可以同時載入多個程序.

2. 時間上的復用:

當程序遇到io阻塞,或者長時間執行,作業系統會將此程序掛起,保留狀態.將cpu強行切換到另乙個程序

幾乎所有的程式又有io阻塞

同時載入到記憶體 3個任務,3個程序,每個程序都有阻塞情況,只要cpu執行乙個程序時,遇到io阻塞立馬回切換,長時間占用cpu也會切換.

提公升效率,最大限度的使用cpu.

如果是乙個io密集型程序,來回切換提公升效率.

如果是乙個計算密集型,來回切換降低效率.

第三代計算機廣泛採用了必須的保護硬體(程式之間的記憶體彼此隔離)之後,第三代計算機應用而生:

每個人占用計算機的時間有限的,

多人(少於10個) 共同使用乙個計算機主機,

1.個人計算機作業系統

個人計算機上的作業系統是聯機互動的單使用者作業系統,它提供的聯機互動功能與通用分時系統提供的功能很相似。

由於是個人專用,因此一些功能會簡單得多。然而,由於個人計算機的應用普及,對於提供更方便友好的使用者介面和豐富功能的檔案系統的要求會愈來愈迫切。

2.網路作業系統

計算機網路:通過通訊設施,將地理上分散的、具有自治功能的多個計算機系統互連起來,實現資訊交換、資源共享、互操作和協作處理的系統。

網路作業系統:在原來各自計算機作業系統上,按照網路體系結構的各個協議標準增加網路管理模組,其中包括:通訊、資源共享、系統安全和各種網路應用服務。

就是新增了一些網路方面的功能。

3.分布式作業系統

表面上看,分布式系統與計算機網路系統沒有多大區別。分布式作業系統也是通過通訊網路,將地理上分散的具有自治功能的資料處理系統或計算機系統互連起來,實現資訊交換和資源共享,協作完成任務。——硬體連線相同。

(1)分布式系統要求乙個統一的作業系統,實現系統操作的統一性。

(2)分布式作業系統管理分布式系統中的所有資源,它負責全系統的資源分配和排程、任務劃分、資訊傳輸和控制協調工作,並為使用者提供乙個統一的介面。

(3)使用者通過這一介面,實現所需要的操作和使用系統資源,至於操作定在哪一台計算機上執行,或使用哪台計算機的資源,則是作業系統完成的,使用者不必知道,此謂:系統的透明性。

(4)分布式系統更強調分布式計算和處理,因此對於多機合作和系統重構、堅強性和容錯能力有更高的要求,希望系統有:更短的響應時間、高吞吐量和高可靠性。

分布式系統已經很普遍了,一般個人用不到,企業在處理比較大的任務

1.程式

一堆靜態的**檔案.
2.程序

乙個正在執行的程式程序. 抽象的概念.

由作業系統操控呼叫交於cpu執行 被cpu執行.

無論是並行還是併發,在使用者看來都是'同時'執行的,不管是程序還是執行緒,都只是乙個任務而已,真是幹活的是cpu,cpu來做這些任務,而乙個cpu同一時刻只能執行乙個任務

序列: 所有的任務乙個乙個的完成.

併發: 乙個cpu完成多個任務.看起來像是同時完成.

並行: 多個cpu執行多個任務,真正的同時完成.

同步: 發起同步呼叫後,就在原地等著任務結束,根本不考慮任務是在計算還是在io阻塞,總之就是一股腦地等任務結束

非同步: 發起非同步呼叫後,並不會等待任務結束才返回,相反,會立即獲取乙個臨時結果(並不是最終的結果,可能是封裝好的乙個物件)

阻塞: cpu遇到io就是阻塞.

非阻塞: 沒有io,就叫非阻塞.

乙個子程序必須依賴於乙個主程序才可以開啟.

乙個主程序可以開啟多個子程序.

unix: fork建立子程序.

unix(linux,mac): 建立乙個子程序會完完全全複製乙個主程序所有的資源,初始資源不變.

windows: 作業系統呼叫createprocess 處理程序的建立.

windows:建立乙個子程序,會copy主程序所有的資源,但是會改變一些資源.

1. 正常退出(自願,如使用者點選互動式頁面的叉號,或程式執行完畢呼叫發起系統呼叫正常退出,在linux中用exit,在windows中用exitprocess)

2. 出錯退出(自願,python a.py中a.py不存在)

3. 嚴重錯誤(非自願,執行非法指令,如引用不存在的記憶體,1/0等,可以捕捉異常,try...except...)

4. 被其他程序殺死(非自願,如kill -9)

無論unix還是windows,程序只有乙個父程序,不同的是:

1. 在unix中所有的程序,都是以init程序為根,組成樹形結構。父子程序共同組成乙個程序組,這樣,當從鍵盤發出乙個訊號時,該訊號被送給當前與鍵盤相關的程序組中的所有成員。

2. 在windows中,沒有程序層次的概念,所有的程序都是地位相同的,唯一類似於程序層次的暗示,是在建立程序時,父程序得到乙個特別的令牌(稱為控制代碼),該控制代碼可以用來控制子程序,但是父程序有權把該控制代碼傳給其他子程序,這樣就沒有層次了。

tail -f access.log |grep '404'

執行程式tail,開啟乙個子程序,執行程式grep,開啟另外乙個子程序,兩個程序之間基於管道'|'通訊,將tail的結果作為grep的輸入。

程序grep在等待輸入(即i/o)時的狀態稱為阻塞,此時grep命令都無法執行

其實在兩種情況下會導致乙個程序在邏輯上不能執行,

程序掛起是自身原因,遇到i/o阻塞,便要讓出cpu讓其他程序去執行,這樣保證cpu一直在工作

與程序無關,是作業系統層面,可能會因為乙個程序占用時間過多,或者優先順序等原因,而呼叫其他的程序去使用cpu。

因而乙個程序由三種狀態

程序併發的實現在於,硬體中斷乙個正在執行的程序,把此時程序執行的所有狀態儲存下來,為此,作業系統維護一張**,即程序表(process table),每個程序占用乙個程序表項(這些表項也稱為程序控制塊)

該錶存放了程序狀態的重要資訊:程式計數器、堆疊指標、記憶體分配狀況、所有開啟檔案的狀態、帳號和排程資訊,以及其他在程序由執行態轉為就緒態或阻塞態時,必須儲存的資訊,從而保證該程序在再次啟動時,就像從未被中斷過一樣。

程序是用來把資源集中到一起(程序只是乙個資源單位,或者說資源集合),而執行緒是cpu上的執行單位。

描述開啟乙個程序:

​ 開啟乙個程序:程序會在記憶體中開闢乙個程序空間,將主程序的資料資料全部複製乙份,執行緒會執行裡面的**.

多執行緒(即多個控制線程)的概念是,在乙個程序中存在多個控制線程,多個控制線程共享該程序的位址空間,相當於乙個車間內有多條流水線,都共用乙個車間的資源。

1. 開啟程序的開銷非常大,比開啟執行緒的開銷大很多.

2. 開啟執行緒的速度非常快.要快幾十倍到上百倍.

3. 執行緒執行緒之間可以共享資料,程序與程序之間需借助佇列等方法實現通訊.

多執行緒共享乙個程序的位址空間

​ 2. 執行緒比程序更輕量級,執行緒比程序更容易建立可撤銷,在許多作業系統中,建立乙個執行緒比建立乙個程序要快10-100倍,在有大量執行緒需要動態和快速修改時,這一特性很有用

3. 若多個執行緒都是cpu密集型的,那麼並不能獲得效能上的增強,但是如果存在大量的計算和大量的i/o處理,擁有多個執行緒允許這些活動彼此重疊執行,從而會加快程式執行的速度。

python 併發程式設計理論部分

一,什麼是程序?程序 正在進行的乙個過程或者說乙個任務。而負責執行任務的則是cpu 舉例 單核 多道,實現多個程序的併發執行 egon在乙個時間段內有很多任務要做 python備課的任務,寫書的任務,交女朋友的任務,王者榮耀上分的任務,但egon同一時刻只能做乙個任務 cpu同一時間只能幹乙個活 如...

python併發程式設計之多執行緒理論部分 day9

一 什麼是執行緒 在傳統作業系統中,每個程序有乙個位址空間,而且預設就有乙個控制線程。執行緒就是一條流水線工作的過程,一條流水線必須屬於乙個車間,乙個車間的工作過程是乙個程序。車間負責把資源整合到一起,是乙個資源單位,而乙個車間內至少有乙個流水線流水線的工作需要電源,電源就相當於cpu。所以,程序只...

Python學習筆記之 網路程式設計(理論部分)

計算機網路功能主要包括實現資源共享,實現資料資訊的快速傳遞 制定組織 iso 國際標準化組織 作用 使網路通訊工作流程標準化 應用層 提供使用者服務,具體功能由應用程式實現表示層 資料的壓縮優化加密會話層 建立使用者級的連線,選擇適當的傳輸服務傳輸層 提供傳輸服務 網路層 路由選擇,網路互聯 鏈路層...