多進程和多線程區別
多進程:操作系統中同時運行的多個程序
多線程:在同一個進程中同時運行的多個任務
舉個例子,多線程下載軟件,可以同時運行多個線程,但是通過程序運行的結果發現,每一次結果都不一致。 因為多線程存在一個特性:隨機性。造成的原因:CPU在瞬間不斷切換去處理各個線程而導致的,可以理解成多個線程在搶CPU資源。
多線程并不能提高運行速度,但可以提高運行效率,讓CPU的使用率更高。但是如果多線程有安全問題或出現頻繁的上下文切換時,運算速度可能反而更低。
線程是獨立調度的程序嗎?
線程是獨立調度和分派的基本單位。線程可以為操作系統內核調度的內核線程,如Win32線程;由用戶進程自行調度的用戶線程,如Linux平臺的POSIXThread;或者由內核與用戶進程,如Windows 7的線程,進行混合調度。
同一進程中的多條線程將共享該進程中的全部系統資源,如虛擬地址空間,文件描述符和信號處理等等。但同一進程中的多個線程有各自的調用棧(call stack),自己的寄存器環境(register context),自己的線程本地存儲(thread-local storage)。
一個進程可以有很多線程,每條線程并行執行不同的任務。
在多核或多CPU,或支持Hyper-threading的CPU上使用多線程程序設計的好處是顯而易見,即提高了程序的執行吞吐率。在單CPU單核的計算機上,使用多線程技術,也可以把進程中負責I/O處理、人機交互而常被阻塞的部分與密集計算的部分分開來執行,編寫專門的workhorse線程執行密集計算,從而提高了程序的執行效率。