多執行緒:
#執行緒的併發是利用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()
程序例:
importmultiprocessing
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()
#程序之間是相互獨立的
importtime
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)
協程例:
importgevent
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程序耗...