程序以及狀態

2021-10-02 01:52:13 字數 2963 閱讀 2051

程序是資源分配的最小單元,也是執行緒的容器。同乙個程序可以包括多個執行緒,並且執行緒共享整個程序的資源(暫存器、堆疊、上下文),乙個程序至少包括乙個執行緒。

程序結束後,程序中的擁有的執行緒都將銷毀,但是執行緒的結束不會影響同乙個程序中的其他執行緒的結束。乙個程式執行起來後,**+用到的資源稱之為程序,他是作業系統分配資源的基本單元,但是執行緒是cpu排程的基本單元。

選擇原則

1.匯入模組

2.通過模組提提供的process類建立程序物件

3.啟動程序

import os

import time

import multiprocessing

defwork1()

:for i in

range(10

):print

('正在執行work1...'

, multiprocessing.current_process())

time.sleep(

0.5)

if __name__ ==

'__main__'

:# 獲取程序的編號

# 1)使用current_process().pid獲取程序編號

print

(multiprocessing.current_process(

).pid)

# 2)使用os模組來獲取

print

(os.getpid())

# 獲取程序的父id

print

('正在執行work1....'

, os.getpid(),

'父id...'

, os.getppid())

# 獲取主程序的名稱

print

(multiprocessing.current_process())

# 2.通過模組提供的process類建立程序物件

# target指定子程序的執行的分支函式

# name 指定子程序的名稱

process_obj = multiprocessing.process(target=work1, name=

'jincheng1'

)# 3.啟動程序

process_obj.start(

)print

('***x'

)

1)子程序引數傳遞

給子程序傳遞引數和給子執行緒傳遞引數的方法基本一致。

2)程序之間不能共享全域性變數

底層原理:子程序會複製主程序的資源到內部執行。

3)程序守護

process_obj.daemon = true

4) 結束子程序
process_obj .terminate()

使用queue佇列能是實現程序之間的通訊。

process_obj.join() #優先讓乙個程序先通訊

"""

1.準備兩個程序

2.準備乙個佇列,乙個程序向佇列中寫入資料,然後把佇列傳遞到另外乙個程序

3.另外乙個程序讀取資料

"""import time

import multiprocessing

# 寫入資料到佇列的函式

defwrite

(queue)

:for i in

range(10

):# 判斷佇列是否已滿

if queue.full():

print

('佇列已滿'

)break

queue.put(i)

print

("寫入成功"

, i)

time.sleep(1)

# 讀取佇列資料並顯示的函式

defread

(queue)

:while

true

:if queue.qsize ==0:

print

('佇列已空'

)break

value = queue.get(

)print

('讀取成功'

,value)

if __name__ ==

'__main__'

:# 建立乙個空的佇列

queue = multiprocessing.queue(5)

# 建立2個程序,分別寫資料、讀資料

write_process = multiprocessing.process(target=write, args=

(queue,))

read_process = multiprocessing.process(target=read, args=

(queue,))

write_process.start(

)# 優先讓寫資料程序執行結束之後,再讀取資料

write_process.join(

) read_process.start(

)

當需要的子程序數量不多的時候,可以直接利用multiprocessing中的process動態生成多個程序,但是如果是上百甚至上千個目標,手動的建立程序的工作量巨大,此時就可以用到multiprocessing模組提供的pool方法。

初始化pool時,可以建立乙個最大程序數,當有新的請求提交到pool中時,如果池還沒有滿,那麼就會建立乙個新的程序用來執行該請求,但是如果池中的程序數已經達到了指定的最大值,那麼該請求就會等待,直到池中有程序結束,才會用之前的程序來執行新的任務。

建立:

import multiprocessing

pool = multiprocessing.process(n). #n表示程序池中的數量

工作方式

程序以及狀態 程序的建立

程式 例如 py這是程式,是乙個靜態的 程序 乙個程式執行起來後,用到的資源 稱之為程序,它是作業系統分配資源的基本單元。不僅可以通過執行緒完成多工,程序也是可以的 乙個程式可以對應多個程序,如qq乙個程式,可以開啟多個qq則是多個程序。程序是擁有資源,如網路 記憶體等 工作中,任務數往往大於cpu...

Linux 程序概念以及程序狀態理解

2 程序狀態 2.2 孤兒程序 2.3 守護程序 精靈程序 程序是乙個pcb 程序控制塊 是乙個執行程式中的描述 在linux下是乙個task struct結構體,通過這個結構體實現作業系統對執行中程式的排程管理。1.1 task struct結構體 task struct結構體是linux核心中的...

程序管理 四 程序的狀態以及轉換

簡要描述 該時刻實際占有著cpu 簡要描述 可以執行,但是由於其他程序正在執行而暫時停止 這種情況下,只不過是系統暫時沒有把cpu分配給它而已,一旦系統將cpu分配給它,它立馬就可以跑。簡要描述 除非外部事件發生否則就不能執行 當乙個程序不能執行的時候,它就會被阻塞。典型的例子就是等待可以使用的輸入...