什么是線程:
線程是操作系統能夠進行運算調度的最小單位(程序執行流的最小單元)。它被包含在進程之中,是進程中的實際運作單位。一個進程中可以并發多個線程,每條線程并行執行不同的任務。(線程是進程中的一個實體,是被系統獨立調度和分派的基本單元)
線程和進程的區別:
(1)線程共享內存空間;進程的內存是獨立的
(2)同一個進程的線程之間可以直接交流;兩個進程想通信,必須通過一個中間代理來實現
(3)創建新線程很簡單; 創建新進程需要對其父進程進行一次克隆
(4)一個線程可以控制和操作同一進程里的其他線程;但是進程只能操作子進程
(5)改變主線程(如優先權),可能會影響其它線程;改變父進程,不影響子進程
現在pc都是多核的,使用多線程能充分利用 CPU 來提供程序的執行效率
線程:
線程是一個基本的 CPU 執行單元,它必須依托于進程存活
進程:
進程是指一個程序在給定數據集合上的一次執行過程,是系統進行資源分配和運行調用的獨立單位。
可以簡單地理解為操作系統中正在執行的程序。也就說,每個應用程序都有一個自己的進程
每一個進程啟動時都會最先產生一個線程,即主線程。然后主線程會再創建其他的子線程
兩者的區別
線程必須在某個進行中執行。
一個進程可包含多個線程,其中有且只有一個主線程。
多線程共享同個地址空間、打開的文件以及其他資源。
多進程共享物理內存、磁盤、打印機以及其他資源
示例:程序中有兩個線程,一個主線程,一個是我們創建的子線程
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)主線程沒有結束,那么子線程還會在執行,什么時候主線程序執行完了,子線程序就跟著主線程一起銷毀了。
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)