并发编程——进程——理论知识
一、什么是進程
程序并不能單獨運行,只有將程序裝載到內存中,系統為它分配資源才能運行,而這種執行的程序就稱之為進程。
進程(Process)是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。
簡單的說,進程就是一個正在進行的一個過程或者說一個任務,負責執行任務的人是CPU。
打個比方,我打開了QQ應用程序,然后跟我女朋友聊天,這就是一個進程。
二、進程與程序的區別
程序和進程的區別就在于:程序是指令的集合,它是進程運行的靜態描述文本;進程是程序的一次執行活動,屬于動態概念。
寫代碼,其實就是寫程序,也就是說,程序僅僅是一大堆代碼而已,而進程,指的是運行這段程序的運行過程。
另外,需要強調的是:同一個程序執行兩次,那也是兩個進程。
還是打開QQ聊天,雖然是同一個軟件,但是可以開兩個聊天窗口,一個跟女朋友聊天,一個跟老板匯報工作。
三、進程的創建
進程需要由操作系統創建,也就是說,只要有操作系統,就有進程的概念。
有一些操作系統只為一個應用程序設計,比如臺燈中的控制器,打開臺燈之后所有的進程就都已經存在了。
比較常見的還是通用系統,我們的筆記本、服務器都是通用系統,可以運行很多應用程序。
對于通用系統來說,需要有在系統運行過程中創建和銷毀進程的能力。
操作系統創建進程有四種方式:
1.系統初始化2.正在運行的進程開啟子進程3.用戶請求交互而創建的新進程4.批處理作業的初始化新進程的創建都是由一個已存在的進程執行一個創建進程的程序而創建的。
在Windows系統中,操作系統調用CreatProcess處理進程的創建并把相應的程序讀入新進程。
在UNIX系統中,操作系統調用fork,創建一個與父進程一模一樣的副本。
父進程和子進程有各自不同的地址空間,任何一個進程在其地址空間中的修改不會影響到另外一個進程。
四、進程的終止
1.正常退出
自愿正常結束一個進程。
我在給老板匯報完工作之后,老板又給我布置了新的任務,而且說這個需求很著急,然我盡快完成,那我就得先跟女朋友說拜拜了,然后一點聊天頁面的關閉按鈕,這個進程就結束了。
2.出錯退出
自愿創建一個進程但出現了一些問題。
老板請求控制我的電腦,要看我的代碼演示效果,然后我打開終端,運行python3 text.py,但是我不小心把字打錯了,應該運行的是test.py這個程序,text.py根本不存在,這時候就會報錯并退出。
C:\Users\86188>python text.py python: can't open file 'text.py': [Errno 2] No such file or directory3.嚴重作錯誤
非自愿退出進程。
女朋友是一個算法小白,問我一道算法題,我一看她的錯誤信息:
Traceback (most recent call last):File "<stdin>", line 1, in <module> ZeroDivisionError: division by zero哦,這是因為把0作為了分母而導致程序退出,一看就是沒有考慮邊界情況。
4.被其它進程殺死
由于我一邊跟女朋友聊天一邊給老板演示,頻繁的切換,再加上我電腦本來就開啟了好多應用程序,QQ突然間卡死了,怎么點都沒有用,沒辦法,啟動任務管理器,結束進程,簡單粗暴有效。
五、進程的層次結構
每個進程只有一個父進程。
在Windows系統中,所有的進程地位是相同的,但是在創建進程時,父進程獲得一個標志,稱為句柄,可以用來控制子進程,但是父進程有權把句柄傳給其它子進程。
在UNIX系統中所有的進程都是以init進程為根組成樹形結構。
六、進程的并發實現
進程的并發實現在于操作系統中斷一個正在運行的進程,把此時進程運行的所有狀態保存到操作系統維護的進程表中,該表存放了進程狀態的重要信息:程序計數器、堆棧指針、內存分配狀態、打開文件狀態、賬號和調度信息和其它所有在進程由運行態轉為就緒態或阻塞態時必須保存的信息,以保證該進程再次啟動時能夠繼續上一次的狀態運行。
總結
以上是生活随笔為你收集整理的并发编程——进程——理论知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git出现Unable to creat
- 下一篇: 并发编程——进程——进程理论的创建