什么是線程:
線程是操作系統(tǒng)能夠進行運算調(diào)度的最小單位(程序執(zhí)行流的最小單元)。它被包含在進程之中,是進程中的實際運作單位。一個進程中可以并發(fā)多個線程,每條線程并行執(zhí)行不同的任務(wù)。(線程是進程中的一個實體,是被系統(tǒng)獨立調(diào)度和分派的基本單元)
線程和進程的區(qū)別:
(1)線程共享內(nèi)存空間;進程的內(nèi)存是獨立的
(2)同一個進程的線程之間可以直接交流;兩個進程想通信,必須通過一個中間代理來實現(xiàn)
(3)創(chuàng)建新線程很簡單; 創(chuàng)建新進程需要對其父進程進行一次克隆
(4)一個線程可以控制和操作同一進程里的其他線程;但是進程只能操作子進程
(5)改變主線程(如優(yōu)先權(quán)),可能會影響其它線程;改變父進程,不影響子進程
現(xiàn)在pc都是多核的,使用多線程能充分利用 CPU 來提供程序的執(zhí)行效率
線程:
線程是一個基本的 CPU 執(zhí)行單元,它必須依托于進程存活
進程:
進程是指一個程序在給定數(shù)據(jù)集合上的一次執(zhí)行過程,是系統(tǒng)進行資源分配和運行調(diào)用的獨立單位。
可以簡單地理解為操作系統(tǒng)中正在執(zhí)行的程序。也就說,每個應(yīng)用程序都有一個自己的進程
每一個進程啟動時都會最先產(chǎn)生一個線程,即主線程。然后主線程會再創(chuàng)建其他的子線程
兩者的區(qū)別
線程必須在某個進行中執(zhí)行。
一個進程可包含多個線程,其中有且只有一個主線程。
多線程共享同個地址空間、打開的文件以及其他資源。
多進程共享物理內(nèi)存、磁盤、打印機以及其他資源
示例:程序中有兩個線程,一個主線程,一個是我們創(chuàng)建的子線程
from threading import Thread
def Foo(arg):
print arg
print 'before'
t1 = Thread(target=Foo,args=(1,))
t1.start()
print t1.getName()
t2 = Thread(target=Foo,args=(2,))
t2.start()
print t2.getName()
print 'after'
#添加t1.setDaemon(True)主線程沒有結(jié)束,那么子線程還會在執(zhí)行,什么時候主線程序執(zhí)行完了,子線程序就跟著主線程一起銷毀了。
from threading import Thread
import time
def Foo(arg):
for item in range(10):
print item
time.sleep(1)
print 'before'
t1 = Thread(target=Foo,args=(1,))
t1.setDaemon(True)
t1.start()
print 'after'
time.sleep(5)