線程vs進程,多線程實例
阿新 • • 發佈:2017-11-08
class alt 唱歌 優缺點 get 定義 yellow 單位 range
進程VS線程
功能
- 進程,能夠完成多任務,比如 在一臺電腦上能夠同時運行多個QQ
- 線程,能夠完成多任務,比如 一個QQ中的多個聊天窗口
定義的不同
-
進程是系統進行資源分配最小單元.
-
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序執行的需要的cpu資源),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源(主要是內存資源).
區別
-
一個程序至少有一個進程,一個進程至少有一個線程.
-
線程的劃分尺度小於進程(資源比進程少),使得多線程程序的並發性高。
-
進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率
-
線程不能夠獨立執行,必須依存在進程中
優缺點
線程和進程在使用上各有優缺點:線程執行開銷小,但不利於資源的管理和保護;而進程正相反。
多線程-threading
python的thread模塊是比較底層的模塊,python的threading模塊是對thread做了一些包裝的,可以更加方便的被使用
說明
- 可以明顯看出使用了多線程並發的操作,花費時間要短很多
- 創建好的線程,需要調用
start()
方法來啟動
主線程會等待所有的子線程結束後才結束
一個多線程實例理解多線程, 查看線程數量
#coding=utf-8 import threading from time import sleep,ctime def sing(): for i in range(3): print("正在唱歌...%d"%i) sleep(1) def dance(): for i in range(3): print("正在跳舞...%d"%i) sleep(1) if __name__ == ‘__main__‘: print(‘---開始---:%s‘%ctime()) t1= threading.Thread(target=sing) t2 = threading.Thread(target=dance) t1.start() t2.start() while True: length = len(threading.enumerate()) print(‘當前運行的線程數為:%d‘%length) if length<=1: break sleep(0.5)
打印結果
---開始---:Wed Nov 8 11:42:41 2017 正在唱歌...0 當前運行的線程數為:3 正在跳舞...0 當前運行的線程數為:3 當前運行的線程數為:3 正在唱歌...1 正在跳舞...1 當前運行的線程數為:3 正在唱歌...2 正在跳舞...2 當前運行的線程數為:3 當前運行的線程數為:3 當前運行的線程數為:1 Process finished with exit code 0
線程vs進程,多線程實例