回覆列表
-
1 # 股海老哥
-
2 # 華弟6460138387376
多線程,是指從軟件或者硬件上實現多個線程併發執行的技術。在一個程序中,這些獨立運行的程序片段叫作“線程”,利用它編程的概念就叫作“多線程處理”。具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多於一個線程,進而提昇整體處理性能。
多線程是為了同步完成多項任務,不是為了提高運行效率,而是為了提高資源使用效率來提高系統的效率。最簡單的比喻多線程就像火車的每一節車廂,而進程則是火車。車廂離開火車是無法跑動的,同理火車也不可能只有一節車廂。
擴展資料
多線程用途:
在大多數研究領域內是要求線程調度程序要能夠快速選擇其中一個已就緒線程去運行,而不是一個一個運行而降低效率。而另一個研究領域則是要研究何種事件(高速緩存失敗、內部運行連續性、使用DMA等)會造成線程切換。
如果多線程的方案會複製所有軟件可見的狀態,包括特許的控制登錄、TLB 等,那就能夠讓虛擬機去創造各式線程。這樣子就允許在相同的處理器中每個線程跑各自的操作系統。換句話說,如果只有存儲了用戶模式的狀態,就能夠讓相同的裸晶大小的芯片在一段時間內處理更多的線程。
好處:
1、可以發揮多核處理器的優勢,程序的運行速度可能加快,更流暢。
2、用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度。
3、在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了。在這種情況下可以釋放一些珍貴的資源如內存占用等等。
缺點:
1、線程的中止需要考慮其對程序運行的影響。
2、如果有大量的線程,會影響性能,因為操作系統需要在它們之間切換。
3、線程可能會給程序帶來更多“bug”,注意線程安全的問題。
4、通常塊模型數據是在多個線程間共享的,需要防止線程死鎖情況的發生。
進程是資源分配的最小單位,線程是調度的最小單位。
進程包含線程,進程中可以有多條線程,也可以只有一條線程。
Python中由於解釋器鎖的存在不能利用多核,是指進程中的多線程不能利用多核,多線程包含在一個進程中的,只有進程才能利用多核,即一個進程一個核,裡面的線程只能來回輪詢利用一個核,不停的調用線程。
進程比線程快的原因是,為了利用核,一個進程中不停的在調度線程,不停的切換線程。時間大多浪費在了這裡。
全局解釋器鎖,可以理解為在分配多核,綁定一個進程,維護進程中數據的一致性狀態,避免數據還沒有執行完畢或狀態還在賦值中,就被其他進程拿去使用。
一臺機器的多核是有限的,一般訪問量較大的時候,利用線程池限制訪問數量,輪詢切換線程。這樣一來,就避免了,突發的併發量導致程序崩潰掉。