day38 併發程式設計 理論

2022-09-02 16:21:14 字數 2585 閱讀 5935

目錄

三、程序理論

四、開啟程序的兩種方式

參考部落格即可:

總結:

補充:我們直接假設單核就是乙個核,幹活的就乙個人,不要考慮cpu裡面的核心數

時間上的復用

切換(cpu)分為兩種情況

1.當乙個程式遇到io操作的時候,作業系統會剝奪該程式的cpu執行許可權

作用:提高了cpu的利用率 並且也不影響程式的執行效率

原因:在io延遲的時候程式對cup沒有任何執行的空間,所以剝奪了也不會影響程式執行

2.當乙個程式長時間占用cpu的時候,操作吸引也會剝奪該程式的cpu執行許可權

弊端:降低了程式的執行效率(原本時間+切換時間)

'''

程式和程序的區別

程式是一堆躺在硬碟上的**,是『死』的

程序則是表示正在執行的過程,是『活』的

'''

短作業優先演算法

時間片輪轉法+多級反饋佇列

在了解其他概念之前,我們首先要了解程序的幾個狀態。在程式執行的過程中,由於被作業系統的排程演算法控制,程式會進入幾個狀態:就緒,執行和阻塞。

(1)就緒(ready)狀態

當程序已分配到除cpu以外的所有必要的資源,只要獲得處理機便可立即執行,這時的程序狀態稱為就緒狀態。

(2)執行/執行(running)

​ 狀態當程序已獲得處理機,其程式正在處理機上執行,此時的程序狀態稱為執行狀態。

(3)阻塞(blocked)狀態

​ 正在執行的程序,由於等待某個事件發生而無法執行時,便放棄處理機而處於阻塞狀態。引起程序阻塞的事件可有多種,例如,等待i/o完成、申請緩衝區不能滿足、等待信件(訊號)等。

描述的是任務提交的方式

非同步就像要把乙份作業交給老師批改,小紅交給老師了,站在原地等老師批改完,小紅的行為叫做同步。而小李交給老師後就跑去完了,這種行為叫做非同步。

描述的是程式執行的狀態

非阻塞(就緒態,執行態)

# 方式一

from multiprocessing import process

import time

def task(name):

print(f' is running')

time.sleep(3)

print(f' is over')

if __name__ == '__main__':

p = process(target=task, args=('hz',))

p.start()

print('^(* ̄(oo) ̄)^')

# 方式二 類的繼承

from multiprocessing import process

import time

class myprocess(process):

def run(self):

print('hell 1')

time.sleep(3)

print('hello 2')

if __name__ == '__main__':

p = myprocess()

p.start()

print('^(* ̄(oo) ̄)^')

總結

"""

建立程序就是在記憶體中申請一塊記憶體空間將需要執行的**丟進去

乙個程序對應在記憶體中就是一塊獨立的記憶體空間

多個程序對應在記憶體中就是多塊獨立的記憶體空間

程序與程序之間資料預設情況下是無法直接互動,如果想互動可以借助於第三方工具、模組

"""

join是讓主程序等待子程序**執行結束之後,再繼續執行。不影響其他子程序的執行

具體使用:在程序開始後,程序物件.join()

from multiprocessing import process

import time

a = 100

def task(name):

print(f' is running')

time.sleep(3)

global a

a = 101

print(a)

print(f' is over')

if __name__ == '__main__':

p = process(target=task, args=('hz',))

p.start()

print(a)

p.join()

print('^(* ̄(oo) ̄)^')

'''

每日演算法 day 38

那些你早出晚歸付出的刻苦努力,你不想訓練,當你覺的太累了但還是要咬牙堅持的時候,那就是在追逐夢想,不要在意終點有什麼,要享受路途的過程,或許你不能成就夢想,但一定會有更偉大的事情隨之而來。mamba out 2020.3.24 如果 k n 那麼就要思考怎樣去選擇了 1.k 如果是偶數的話,選出來的...

Day38 資料庫入門學習

怎麼才能把資料永久儲存下來,根據我們以前的所學,檔案處理就可以將資料永久儲存。但是檔案處理有很大的問題 1.管理不方便 2.檔案操作效率問題 3.乙個程式不太可能僅執行在同一臺電腦上 那麼為了解決這些問題,採取了提高計算機效能的方式 1.垂直擴充套件 指的是更換效能更好的硬體 2.水平擴充套件 指的...

38 併發程式設計

一 多道技術 1.1 必備知識點 併發 看起來像同時執行的就可以稱之為併發 並行 真正意義上的同時執行 注 並行肯定算,單核的計算機肯定不能實現並行,但是可以實現併發!補充 我們直接假設單核就是乙個核,幹活的就乙個人,不要考慮cpu裡面的核心數 1.2 多道技術 節省多個程式執行的總耗時 1.2.1...