1、什么是線程?
線程是程序執行的最小單位,CPU把所有的時間分成若干個小片,把每一個小片不斷的分給不同的線程來執行,保證每個程序都有機會執行,不會有程序一直霸占CPU。
2、什么是多線程?
多線程是一種并發執行的技術,主要目的是最大化的利用各種資源,提高程序整體性能。另外,在線程之間設計緩沖區,可以很好地對線程進行解耦。
多線程有兩層含義,第一層是開啟多個線程做不同的事情,這種主要是為了并發同時做很多事情。第二層是開啟多個線程做同一個事情,這種是為了效率更高。
在我們計算機中,CPU、磁盤、顯卡、網絡帶寬這些都是資源。比如拷貝文件的時候,主要在使用磁盤資源,這時候其他資源是閑置的,如果使用多線程,就可以把CPU、網絡帶寬資源利用起來,做到一邊拷貝文件,一邊打LOL。不過在有些場景里,資源是單一的(比如單核CPU計算圓周率),這時候使用多線程是沒有意義的,反而會因為線程之間的切換造成額外的開銷。
如果程序有響應遲鈍、效率低、吞吐不高的情況,可以考慮使用多線程。
3、操作系統的多線程
在一個GUI的系統中,比如Android、iOS、Windows等等,操作系統本身的設計就是多線程的。其中至少有兩個線程,一個叫主線程,另一個叫工作者線程。
主線程一般是用來繪制界面,響應用戶操作的(比如觸摸、滑動、點擊),這個線程最好不被應用程序所打擾,因為它最好保持很高的實時性。
工作者線程,是用來運算或者完成邏輯的,它對用戶界面和操作不負責響應,默默的做計算,做邏輯,并將一些結果反饋給主線程,從而展示不同的用戶界面和邏輯。
4、APP的多線程
任何一個app,在啟動的時候都做了大量的事情,都是多線程的,有的線程可能在加載新模塊,有的線程在做上報,有的線程在收集lbs信息等。
多線程也有弊端,就是多個線程的時序不好控制,多個線程之間的共享變量控制難度比較大,多線程通知機制復雜,且調試困難。
5、什么是線程池?
把一個東西「池化」是一種很典型的復用思想,它的核心就是,這些東西如果可以重復使用的話,就盡量不要銷毀它。線程池就是線程的集合,為某些任務分類一定的線程數量,大量請求的時候排隊等候,避免操作系統占用太多資源。
類似的,還有對象池、連接池等等。
——部分內容整理自網絡——