什麼是線程
什麼是線程?線程也叫輕量級進程,是操作系統能夠進行運算調度的最小單位,線程自己不擁有系統資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其他線程共享進程所擁有的全部資源。一個線程可以創建和撤銷另一個線程,同一個進程中的多個線程可以併發執行,經常說的併發就是這個⬅️
爲什麼要使用多線程
線程在程序中是獨立的、併發的執行流。與分隔的進程相比,進程中線程之間的隔離程度要小,它們共享內存、文件句柄和其他進程應有的狀態。
粗一些(比如我)可以認爲:多線程可以實現幾乎同步的運行。
這就很棒了,我以前編寫的程序都是一步一步來的,但有了多線程就可以同步執行,嘿嘿爽😎
多線程編程的優點
- 進程之間不能共享內存,但線程之間共享內存非常容易。
- 線程可以併發執行
- 操作系統在創建進程時,需要爲該進程重新分配系統資源,但創建線程的代價則小得多。因此使用多線程來實現多任務併發執行比使用多進程的效率高
- python語言內置了多線程功能支持,而不是單純地作爲底層操作系統的調度方式,從而簡化了python的多線程編程。
快速開始⏩
Python中的多線程模塊是threading
,直接使用import
語句引入即可,如果想簡化可以使用from threading import *
免去輸入threading.
,下面是一個簡單實例。
import threading
import time,os
def run(n):
print('task',n)
time.sleep(1)
print('2s')
time.sleep(1)
print('1s')
time.sleep(1)
print('0s')
time.sleep(1)
if __name__ == '__main__':
t1 = threading.Thread(target=run,args=('t1',))
t2 = threading.Thread(target=run,args=('t2',))
t1.start()
t2.start()
其中將兩條線程給了t1
和t2
,參數target
是目標函數,下一個參數args
是參數,參數放在元組裏面,一個元素最後加一個逗號。
運行結果:
task t1
task t2
2s
2s
1s
1s
0s
0s
並行的執行函數,如果是以前的寫法,改寫如下
import threading
import time
def run(n):
print('task', n)
time.sleep(1)
print('2s')
time.sleep(1)
print('1s')
time.sleep(1)
print('0s')
time.sleep(1)
if __name__=='__main__':
# t1=threading.Thread(target=run,args=('t1',))
# t2 = threading.Thread(target=run,args=('t2',))
# t1.start()
# t2.start()
run('t1')
run('t2')
運行結果:
task t1
2s
1s
0s
task t2
2s
1s
0s
發現是分步執行的,這下入門了