計算機 程序 執行緒 協程

2022-07-07 05:42:10 字數 2013 閱讀 5936

通俗來說就是寫了一段**,交給作業系統執行,作業系統分給乙個程序進行實施,程序要進行硬體的分配工作從而完成這段**。

程序是正在執行的程式的例項。是系統進行資源分配和排程的基本單位,在早期面向程序涉及的計算機結構中,程序是程式的基本執行實體,在當代面向執行緒涉及的計算機結構中,程序是執行緒的容器。

1. 作業系統中的唯一識別符號(pid)

2 在linux中,每個程序都由父程序啟動,起乙個子程序相當於複製乙個父程序。

3. linux中髮根程序為1

程序排程:

要想多個程序交替執行,作業系統必須對這些程序進行排程,這個排程也不是隨即進行的,而是需要遵循一定的法則,由此就有了程序的排程演算法。

在輪轉法中,加入到就緒佇列的程序有3種情況: 一種是分給它的時間片用完,但程序還未完成,回到就緒佇列的末尾等待下次排程去繼續執行。 另一種情況是分給該程序的時間片並未用完,只是因為請求i/o或由於程序的互斥與同步關係而被阻塞。當阻塞解除之後再回到就緒佇列。 第三種情況就是新建立程序進入就緒佇列。

(1) 應設定多個就緒佇列,並為各個佇列賦予不同的優先順序。第乙個佇列的優先順序最高,第二個佇列次之,其餘各佇列的優先權逐個降低。該演算法賦予各個佇列中程序執行時間片的大小也各不相同,在優先權愈高的佇列中,為每個程序所規定的執行時間片就愈小。例如,第二個佇列的時間片要比第乙個佇列的時間片長一倍,……,第i+1個佇列的時間片要比第i個佇列的時間片長一倍。

(2) 當乙個新程序進入記憶體後,首先將它放入第一佇列的末尾,按fcfs原則排隊等待排程。當輪到該程序執行時,如它能在該時間片內完成,便可準備撤離系統;如果它在乙個時間片結束時尚未完成,排程程式便將該程序轉入第二佇列的末尾,再同樣地按fcfs原則等待排程執行;如果它在第二佇列中執行乙個時間片後仍未完成,再依次將它放入第三佇列,……,如此下去,當乙個長作業(程序)從第一佇列依次降到第n佇列後,在第n 佇列便採取按時間片輪轉的方式執行。

(3) 僅當第一佇列空閒時,排程程式才排程第二佇列中的程序執行;僅當第1~(i-1)佇列均空時,才會排程第i佇列中的程序執行。如果處理機正在第i佇列中為某程序服務時,又有新程序進入優先權較高的佇列(第1~(i-1)中的任何乙個佇列),則此時新程序將搶占正在執行程序的處理機,即由排程程式把正在執行的程序放回到第i佇列的末尾,把處理機分配給新到的高優先權程序。

程序的三種狀態:

#程式在開始執行之後,並不是立即開始執行**,而是會進入就緒狀態,等待作業系統排程開始執行。

import time

print('程式開始執行') #程式執行狀態

name = input('====>') #在這裡遇到等待使用者輸入操作,程式進入阻塞狀態

#使用者輸入之後程序並不是立即執行,而是進入就緒狀態,等待作業系統的排程繼續執行。

print(name) #執行

time.sleep(1) #阻塞

#就緒print('程式結束執行') #執行

#結束

同步和非同步:

所謂同步就是乙個任務的完成需要依賴另外乙個任務時,只有等待被依賴的任務完成後,依賴的任務才能算完成,這是一種可靠的任務序列。要麼成功都成功,失敗都失敗,兩個任務的狀態可以保持一致。

所謂非同步是不需要等待被依賴的任務完成,只是通知被依賴的任務要完成什麼工作,依賴的任務也立即執行,只要自己完成了整個任務就算完成了。至於被依賴的任務最終是否真正完成,依賴它的任務無法確定,所以它是不可靠的任務序列。

同步/非同步/阻塞/非阻塞

同步阻塞:

公路上開車前面施工堵了,就只能在車裡等著開通。期間什麼都不做。

非同步阻塞:

同步非阻塞:

可以離開車,車邊上逛逛,撩撩妹子,wc啥的,但要一直盯著公路看看通沒通。一邊撩妹一邊看堵不堵。

非同步非阻塞:

跟旁邊大卡車的司機說一聲,坐的高看前面的路通了就叫一下。那麼我就可以認真的撩妹和wc了。。

執行緒:協程:

程序 執行緒 協程

多程序多執行緒的最終目地都是為了加快任務處理的時間,但是受限於cpu核數 只有多核才能實現並行,任務耗時 單核任務耗時 cpu核數 那麼在單核上執行多程序多執行緒是不是沒有用了,加快不了處理的速度了?答案肯定是不是的,不然這個東西設計出來太雞肋了,那它們加快處理的原理是什麼呢?乙個程序耗時 b程序耗...

程序 執行緒 協程

程序是系統資源分配的最小單位,系統由乙個個程序 程式 組成。一般情況下,包括文字區域 text region 資料區域 data region 和堆疊 stack region 檔案描述符表 程序每次開啟乙個檔案,系統就會在該程序的使用者檔案描述符表中分配乙個相應的表項,表項的索引返回給該程序,用於...

執行緒 程序 協程

執行緒是作業系統中進行運算排程的最小單位。執行緒被包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中乙個單一順序的控制流,乙個程序可以併發多個執行緒,每條執行緒並行執行不同的任務。乙個執行緒是乙個execution context 執行上下文 即乙個cpu執行時所需要的一串指令。每個獨立...