(三)多執行緒之多執行緒與多程序的區別

2022-08-02 10:12:11 字數 2947 閱讀 7124

一、誰的開啟速度快?

1,在主程序下開啟子程序

import

time

from multiprocessing import

process

defsay_hi(name):

print('

%s say hi!

' %name)

time.sleep(2)

print('

%s say hello!

' %name)

if__name__ == '

__main__':

p = process(target=say_hi,args=('

zixi

',))

p.start()

print('

主線程'

)"""

主線程zixi say hi!

zixi say hello!

"""

開程序p.start () 將開啟程序的訊號發給作業系統後,作業系統要申請記憶體空間,好讓父程序位址空間拷貝到子程序,開銷遠大於執行緒。

2,在主程序下開啟執行緒

import

time

from threading import

thread

defsay_hi(name):

print('

%s say hi!

' %name)

time.sleep(2)

print('

%s say hello!

' %name)

if__name__ == '

__main__':

t = thread(target=say_hi,args=('

zixi

',))

t.start()

print('

主線程'

)"""

zixi say hi!

主線程zixi say hello!

"""

開執行緒幾乎是 t.start () 的同時就將執行緒開啟了,然後先列印出了zixi say hi!,證明執行緒的建立開銷極小。

二、同一程序內的多個執行緒共享該程序的資料

1,程序之間的位址空間是隔離的

from multiprocessing import

process

n = 100

deftask():

global

n n =0

if__name__ == '

__main__':

p = process(target=task,)

p.start()

p.join()

print('

主線程'

,n)#

主線程 100

毫無疑問子程序 p 已經將自己的全域性的 n 改成了0,但改的僅僅是它自己的,檢視父程序的 n 仍然為100。

2,同一程序內開啟的多個執行緒是共享該程序位址空間的

from threading import

thread

n = 100

deftask():

global

n n =0

if__name__ == '

__main__':

t = thread(target=task,)

t.start()

t.join()

print('

主線程'

,n)#

主線程 0

檢視結果為 0,因為同一程序內的執行緒之間共享程序內的資料。

三、看一下 pid

1,開多個程序,每個程序都有不同的 pid

from multiprocessing import

process

import

osdef

task():

print("

子程序pid:%s 父程序pid:%s

" %(os.getpid(),os.getppid()))

if__name__ == '

__main__':

p1 = process(target=task,)

p2 = process(target=task,)

p1.start()

p2.start()

print('

主線程'

,os.getpid())

"""主線程 11256

子程序pid:1416 父程序pid:11256

子程序pid:18872 父程序pid:11256

"""

2,在主程序下開啟多個執行緒,每個執行緒都跟主程序的 pid 一樣

from threading import

thread

import

osdef

task():

print("

執行緒pid:%s

" %(os.getpid()))

if__name__ == '

__main__':

t1 = thread(target=task,)

t2 = thread(target=task,)

t1.start()

t2.start()

print('

主線程'

,os.getpid())

"""執行緒pid:10288

執行緒pid:10288

主線程 10288

"""

多程序與多執行緒的區別

據說這個問題很重要,要從多個方面總結。多執行緒和多程序的區別 小結 多執行緒還是多程序的選擇及區別 關於程序和執行緒對於全域性變數共享的問題學習總結 程序是資源分配的最小單位,執行緒是cpu排程的最小單位。同一程序的不同執行緒會共享程序記憶體空間中的全域性區和堆。執行緒私有的是棧和暫存器。因此。區域...

多程序與多執行緒的區別

多程序與多執行緒的區別?解 1 從資料共享 同步方面來講,多程序資料共享複雜,需要用ipc,資料是分開的,同步簡單 多執行緒資料共享簡單,但也是因為這個原因導致同步複雜。2 從內 存 cpu 方面來講,多程序占用記憶體多,切換複雜,cpu利用率低 多執行緒占用記憶體少,切換簡單,cpu利用率高。3 ...

多執行緒與多程序的區別

維度 多程序多執行緒 總結資料共享 同步 資料是分開的,共享複雜,需要用ipc 同步簡單 多執行緒共享程序資料,共享簡單 同步複雜 各有優勢 記憶體 cpu 占用記憶體多,切換複雜,cpu利用率低 占用記憶體少,切換簡單,cpu利用率高 執行緒佔優 建立銷毀 切換 建立銷毀 切換複雜,速度慢 建立銷...