1.概念:
多線程(multithreading)到底是什么呢,它是指在軟件或者硬件上實現多個線程并發執行的技術。具有多線程能力的計算機因有硬件的支持,而能夠在同一時間執行多個線程,進而提升整體處理性能。在一個程序中,這些獨立運行的程序片段,叫做線程(thread)。利用它編程的概念就叫做多線程處理。
2.多線程的原理:
對于單核的cpu而言,同一時間,CPU實際只能處理一個線程,也就是說,在某一時刻,實際只有一個線程在執行。所以對于在單核的CPU,執行多線程。實際上是在不同的線程之間來回切換。造成多個線程同時執行的現象。如果同時啟動的線程非常多的話,就會對CPU資源浪費。
而對于多核的CPU而言,才是真正的在某一個時刻同時執行。比如雙核,雙線程。
3.關于線程與進程
每一個正在系統上運行的程序都是一個進程,一個進程包含一個或多個線程。進程可能是整個程序或者部分程序程序的動態執行。線程是一組執行的集合,或者是程序的特殊段,它可以在程序里獨立執行,也可以把它理解為代碼運行的上下文。所以線程是輕量級的進程。它負責在單個程序里執行多任務。通常是由操作系統來負責多個線程的調度和執行。
線程是程序里單一的順序控制流程,在單個程序中同時運行多個線程完成不同的工作,稱為多線程。
線程和進程的區別在于:子進程和父進程有不同的代碼和數據空間。而多個線程則共享數據空間。每個線程都有自己的執行堆棧和程序計數器為其執行上下文。多線程主要是為了節約CPU時間,發揮利用,根據具體情況而定。線程的運行中需要使用計算機的內存資源和CPU.
4.多線程的優缺點
優點;
1.可以把耗時較長的任務放到后臺去處理。比如,下載圖片。
2.可以有更好的用戶交互。比如進度條的顯示。
3.程序的運行速度可能加快。
缺點:
1.當線程數量較多的時候,會占用大量的CPU資源。而且執行的時間只慢不快。
2.開啟一個線程需要占用一定的內存空間。默認情況下,是512K,如果開啟大量的線程,會占用大量的內存空間,降低程序的性能。更多的線程需要更多的內存空間。
3.程序設計更加復雜,比如線程間的通信,多線程的數據共享,可能會給程序帶來更多的BUG,因此要小心使用。
4.通常塊模型的數據在多個線程間共享的,需要進行合理的管理。
既然有優點也有缺點,那么為什么我們要學習和使用多線程編程技術呢?
一個個的按順序執行程序是無法忍受的,比如你顯示一個列表。里面很多人的頭像,信息,但是下載頭像需要大量的時間,你如果等待頭像下載完畢,列表才能顯示,是非常痛苦的,尤其在移動APP里,一切以用戶的體驗為第一重要任務。
在IOS開發里,在一個程序運行之后,默認開啟一個線程,就是大家常說的“主線程”,或者“UI線程”。主線程一般用來刷新UI界面,處理UI事件。(比如點擊,滾動,拖拽)等等。
在主線程的使用中要注意,不要將那些耗時的操作放到主線程中。
耗時操作會卡住主線程。嚴重影響用戶體驗。
?