併發程式設計1

2022-08-29 13:06:18 字數 1815 閱讀 2506

1 程序與程式

程序:正在執行的乙個過程。程序是對正在執行程式的乙個抽象

程式:是由程式設計師將自己的思維邏輯按照某種程式語言規範編寫下來的一堆字串,最終形成的一堆檔案

程序是由程式產生的,沒有程式就沒有程序

2 作業系統與程序

應用程式無法直接執行在硬體之上,一定要借助作業系統

所以程序是由作業系統建立的

作業系統本質也是一款軟體與普通軟體的區別

作業系統是真正在控制硬體,應用程式實際是在呼叫作業系統提供的介面

作業系統的主要功能

1 封裝隱藏了複雜的硬體操作,提供簡單的介面

2 需要將各個應用程式對硬體的競爭變得有序

3 多道技術的演變

多道技術是為了解決同一時間只有乙個應用程式被執行的問題

多道技術提高效率的原理就是通過空間復用和時間復用

空間復用:同一時間在記憶體中存放多個應用程式

空間復用:

切換:1 當乙個程式a在執行過程中遇到io操作時,作業系統就會切換到另乙個程式執行,感覺就像是多個應用程式都在執行(併發)

2 當乙個程式a執行時間過長也會強制切換到其他的應用程式,以此保證對公程式都在執行

3 如果出現了乙個優先順序更高的任務也會切換

儲存狀態:

當乙個作業系統要從乙個程序切換到另乙個程序時,必須儲存當前進行的狀態,以便下次切換回來的時候繼續執行

強調:多個程序之間記憶體要相互獨立,並且時物理層面的隔離(程式是不可能修改的),以保證安全性

多道技術帶來的好處

同一時間可以有多個應用程式在執行,在io較多時極大的提高了效率

弊端:如果所有應用程式都沒有io操作,反而會降低效率

應用程式的執行效率取決於io操作,io操作越多則效率越低

提高效率:1 減少io    2 避免被作業系統切換

4 程序的狀態

阻塞態執行態

就緒態產生程序與程序的父子關係

執行乙個程式就會產生乙個程序

py檔案要執行,必須借助python直譯器,所有啟動的程序是pytho.exe

同乙個程式可以多次執行,產生多個程序

每乙個經常都會隨機分配乙個pid

乙個程序a 開啟另乙個程序b b就是a的子程序

建立進行的兩種方式

1 建立process物件,傳入函式

2 建立類,繼承process類,覆蓋run方法

程序間記憶體相互獨立

join函式

會使主程序等待子程序執行完畢後才會繼續執行

process物件常用的屬性

start 僅僅是傳送乙個訊號,告訴作業系統要開子程序

name 在建立是可以給程序取名字

exitcode 獲取程序的退出碼,只有在程序完全結束時才能獲取

pid 獲取程序的pid

terminate 終止程序

is_alive 獲取程序的存活狀態

預設情況下**是序列

序列:按照順序依次執行

需要注意的是,序列執行的過程中因為計算操作太多也會導致程式卡住,但是這與io阻塞不同

io阻塞裡面將cpu切到其他程序,而序列執行一堆計算任務,cpu沒有切走

阻塞:指的是程序的狀態

併發:指多個時間同時發生(單核下就是通過切換+儲存狀態來實現)

並行:真正意義上的同時執行(多核處理器才有可能出現)

孤兒程序

父程序退出時子程序還在執行,這些子程序被稱為孤兒程序

孤兒程序沒有危害

殭屍程序

子程序退出,父程序沒有呼叫wait和waitpid獲取子程序的狀態資訊,那麼子程序描述符任然儲存在系統中這些程序被稱為殭屍程序

殭屍程序會占用資源

併發程式設計 1

目錄 程序 程序即正在執行的乙個過程。程序是對正在執行程式的乙個抽象。將應用程式對硬體資源的靜態請求變得有序化 併發 看起來是同時執行的 並行 真正做到了同時執行 多道技術 了解 空間復用 共用乙個記憶體條,每乙個程序都有自己獨立的記憶體空間,互不干擾,物理級別的隔離 時間復用 共用乙個cpu cp...

go 併發程式設計 1

優雅的併發程式設計正規化,完善的併發支援,出色的併發效能是go語言區別於其他語言的一大特色.1.併發基礎 win和linux 出現之前,程式設計師並沒有併發的概念.因為命令式程式語言是以序列為基礎的,程式會順序執行每條指令,整個過程只有乙個上下文,即乙個呼叫棧,乙個堆.併發則意味著程式在執行時有多個...

JAVA併發1 併發程式設計的挑戰

乙個cpu同一時刻只能執行乙個執行緒 cpu 通過給每個執行緒分配一定的時間片,時間片非常短,通常是幾十毫秒,來不停的切換執行緒執行任務,達到了多執行緒的效果。當執行緒用完自己的時間片後,及時任務還沒有完成,作業系統也會剝奪它的執行權,讓另一條執行緒執行。當一條執行緒的時間片用完後,作業系統會暫停該...