併發程式設計(九) 多執行緒與多程序

2022-05-17 02:23:28 字數 2353 閱讀 1774

*****

本小節就乙個要求

掌握在乙個程序下開啟多個子程序與在乙個程序下開啟多個執行緒的區別

開始操作

from threading import thread

def work():

print('hello')

if __name__ == '__main__':

for i in range(10):

t = thread(target=work)

t.start()

print('主線程/主程序')

可以發現執行的很快

from multiprocessing import process

def func():

print('我是子程序')

pass

if __name__ == '__main__':

for i in range(10):

p = process(target=func)

p.start()

print('主程序')

相比較來說你會發現執行緒要更快

其實一想也是,開十個程序相當於十個程序+十個執行緒

那時間上指定要比十個執行緒要長

import os

from multiprocessing import process

def func():

print('我是子程序', os.getpid())

pass

if __name__ == '__main__':

for i in range(10):

p = process(target=func)

p.start()

print('主程序', os.getpid())

我們可以看到,因為是新開的程序,所以每個程序的id都不同

主程序 1516

我是子程序 6800

我是子程序 440

我是子程序 1840

我是子程序 7892

我是子程序 228

我是子程序 6464

我是子程序 4628

我是子程序 4944

我是子程序 4244

我是子程序 2300

import os

from threading import thread

def func():

print('我是子程序', os.getpid())

pass

if __name__ == '__main__':

for i in range(10):

p = thread(target=func)

p.start()

print('主程序', os.getpid())

列印結果上可以看出,多執行緒的開啟時基於乙個程序開啟

我是子程序 11228

我是子程序 11228

我是子程序 11228

我是子程序 11228

我是子程序 11228

我是子程序 11228

我是子程序 11228

我是子程序 11228

我是子程序 11228

我是子程序 11228

主程序 11228

from multiprocessing import process

def work():

global n

n = 0

if __name__ == '__main__':

n = 100

p = process(target=work)

p.start()

p.join()

print('主', n)

可以看到列印結果是 100

儘管在子程序裡對全域性變數中的n進行了修改,但是沒有改變主程序裡面的資料

所以可以說明,在程序中,資料是不互通的

from threading import thread

def work():

global n

n = 0

if __name__ == '__main__':

n = 100

p = thread(target=work)

p.start()

p.join()

print('主', n)

可以看到列印結果是 0

在子執行緒裡對全域性變數中的n進行了修改,改變主程序裡面的資料

*****

*****

多執行緒與多程序

程序 程序是程式的一次執行,在傳統的計算機中,程序既是基本的分配單元,也是基本的執行單元。執行緒 執行緒是可執行的實體單元,它是處理機排程的基本單位。由於執行緒在同一位址空間,因此建立和撤銷執行緒的開銷小,執行緒間的通訊效率高,切換迅速。在多處理機系統中,對程序的個數有所限制,但對執行緒的個數不存在...

多執行緒與多程序

魚還是熊掌 多程序多執行緒的選擇 關於多程序和多執行緒,教科書上最經典的一句話是 程序是資源分配的最小單位,執行緒是cpu排程的最小單位 這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這麼簡單了,選的不好,會讓你深受其害。經常在網路上看到有的xdjm問 多程序好還是多執行緒好?...

多程序與多執行緒

import threading建立乙個執行緒,指向的函式,不接收引數的情況 t threading.thread target 函式名 建立乙個執行緒,指向的函式,收引數的情況 t threading.thread target 函式名,args 實參1,執行緒物件名.start 生命週期 我們的...