1. 程式人生 > >進程之並行並發、同步異步與阻塞非阻塞

進程之並行並發、同步異步與阻塞非阻塞

exit 發的 cpu 並行 傳遞 說明 .py 基於 狀態保存

關於進程必備的理論基礎:
1.操作系統的作用:
隱藏醜陋復雜的硬件接口,提供良好的抽象接口
管理、調度進程,並且將多個進程對硬件的競爭變得有序
2.多道技術:
產生背景:
針對單核,實現並發
現在的主機一般是多核,那麽每個核都會利用多道技術
4個cpu,運行於cpu1的某個程序遇到io阻塞,會等到io結束再重新調度
會被調度到4個cpu中的任意一個,具體由操作系統調度算法決定
空間上的復用:
如內存中同時有多道程序
時間上的復用:

復用一個cpu的時間片
註意:遇到io切,占用cpu時間過長也切
核心在於切之前將進程的狀態保存下來
這樣才能保證下次切換回來時,能基於上次切走的位置繼續運行



進程概念:
進程是一個具有一定獨立功能的程序關於某個數據集合的一次運行活動。
它是操作系統動態執行的基本單元
在傳統的操作系統中,進程既是基本的分配單元,也是基本的執行單元。

進程與程序的區別
程序:
是指令和數據的有序集合,是一個靜態的概念。
可以作為一種軟件資料長期存在
是永久的
進程:
是程序在處理機上的一次執行過程,它是一個動態的概念。
是有一定生命期的。
進程是暫時的。

註意:
同一個程序執行兩次,就會在操作系統中出現兩個進程
所以可以同時運行一個軟件,分別做不同的事情也不會混亂。
比如可以打開兩個Pycharm做不同的事

進程調度
要想多個進程交替運行,操作系統必須對這些進程進行調度
這個調度也不是隨即進行的,而是需要遵循一定的法則
由此就有了進程的調度算法:
先來先服務調度算法
短作業優先調度算法
時間片輪轉法
多級反饋隊列


進程的並行和並發
並行是指兩者同時執行,比如賽跑,兩個人都在不停的往前跑
並發是指資源有限的情況下,兩者交替輪流使用資源

並行與並發的區別:
並行是從微觀上,也就是在一個精確的時間片刻,有不同的程序在執行,這就要求必須有多個處理器。
並發是從宏觀上,在一個時間段上可以看出是同時執行的,比如一個服務器同時處理多個session。


在程序運行的過程中,由於被操作系統的調度算法控制,程序會進入幾個狀態:
就緒
運行
阻塞

舉例說明什麽是argv,什麽是阻塞
import sys # Python解釋器
print(sys.argv)
[‘G:/course_select/進程的概念.py‘]

argv指參數
sys.argv是Python解釋器在運行的時候傳遞進來的參數
之所以這樣說,是因為如果把該文件在cmd運行的時候
首先在cmd輸入以下信息:
python G:/course_select/進程的概念.py
打印結果:[‘G:/course_select/進程的概念.py‘]
然後在cmd中切換路徑到G盤,接著輸入 python course_select/進程的概念.py
打印結果:[‘course_select/進程的概念.py‘]
接著,再在cmd中輸入:python course_select/進程的概念.py 123 abc
打印結果:[‘course_select/進程的概念.py‘, ‘123‘, ‘abc‘]

因此,以下程序不能在編輯器裏運行,只能在cmd裏面使用python運行本文件
然後要在後面加上alex sb,就像上面的 python course_select/進程的概念.py 123 abc 一樣
if sys.argv[1] == "alex" and sys.argv[2] == "sb":
print("登錄成功")
else:
print("登錄失敗")
exit()
print(666)

而如果使用input(),其實就是一種阻塞

技術分享圖片




同步、異步

同步:
形象的說,一件事的執行必須依賴另一件事的結束,強調的是順序性
異步:
形象的說,兩件事情可以同時進行

註意,和並行、並發沒關系

阻塞:等待
非阻塞:不等待
主要是從程序(線程)等待消息通知時的狀態角度來說的

同步阻塞
異步阻塞
同步非阻塞
異步非阻塞

進程之並行並發、同步異步與阻塞非阻塞