python中線程 程序 協程

2022-09-17 08:06:12 字數 2551 閱讀 8496

多執行緒:

#執行緒的併發是利用cpu上下文的切換(是併發,不是並行)

#多執行緒執行的順序是無序的

#多執行緒共享全域性變數

#執行緒是繼承在程序裡的,沒有程序就沒有執行緒

#gil全域性直譯器鎖

#只要在進行耗時的io操作的時候,能釋放gil,所以只要在io密集型的**裡,用多執行緒就很合適

#在cpu密集時候不適用多執行緒

# 執行緒是作業系統排程的單位

# 執行緒切換需要的資源一般,效率一般

多程序#乙個程式執行起來之後,**+用到的資源稱之為程序,它是作業系統分配資源的基本單位,不僅可以通過執行緒完成多工,程序也是可以的

#程序之間是相互獨立的

#cpu密集的時候適合用多程序

# 程序是資源分配的單位

# 程序切換需要的資源最大,效率低

協程# 協程切換任務資源很小,效率高

# 協程又叫做微執行緒

# 協程在乙個執行緒中

併發:三個任務1個cpu同時執行

並行:3個任務3個cpu執行

序列:3個任務1個cpu 乙個乙個執行

執行緒例:

import time

import threading

def test1():

for i in range(5):

print('test1-%s' % i)

time.sleep(1)

def test2():

for i in range(5)

print('test2-%s' % i)

time.sleep(1)

t1 = threading.thread(target=test1)

t2 = threading.thread(target=teat2)

t1.start()

t2.start()

程序例:

import

multiprocessing

import

time

deftest1(n):

for i in

range(n):

time.sleep(1)

print('

test1-{}

'.format(i))

deftest2(n):

for i in

range(n):

time.sleep(1)

print('

test2-{}

'.format(i))

if__name__ == '

__main__':

p1 = multiprocessing.process(target=test1,args=(5,))

p2 = multiprocessing.process(target=test2,args=(5,))

p1.start()

p2.start()

#程序之間是相互獨立的

import

time

import

multiprocessing

n =0

deftest1():

global

nfor i in range(10):

n += 1

print('

test

',n)

deftest2():

global

nfor i in range(10):

n += 1

print('

test2

',n)

if__name__ == '

__main__':

p1 = multiprocessing.process(target=test1)

p2 = multiprocessing.process(target=test2)

p1.start()

p2.start()

print('

全域性',n)

協程例:

import

gevent

from gevent import

monkey

monkey.patch_all()

#補丁包

import

time

deftest1():

for i in range(5):

time.sleep(1)

print('

test1

',1)

deftest2():

for i in range(5):

time.sleep(2)

print('

test2

',1)

g1 =gevent.spawn(test1)

g2 =gevent.spawn(test2)

g1.join()

g2.join()

Python 程序 執行緒 協程

程序和執行緒之間的關係 執行緒是屬於程序的,執行緒執行在程序空間內,同一程序所產生的執行緒共享同一記憶體空間,當程序退出時該程序所產生的執行緒都會被強制退出並清除。執行緒可與屬於同一程序的其它執行緒共享程序所擁有的全部資源,但是其本身基本上不擁有系統資源,只擁有一點在執行中必不可少的資訊 如程式計數...

Python 程序,執行緒, 協程

程序是系統進行資源分配和排程的乙個獨立單位 最小單位 程序的幾個狀態 空 新建 建立執行乙個程式的新程序,可能的事件有 新的批處理作業 互動登入 終端使用者登入到系統 作業系統因為提供一項服務而建立 由現有的程序派生等。新建 就緒 作業系統準備好再接納乙個程序時,把乙個程序從新建態轉換為就緒態。就緒...

程序 執行緒 協程

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