進程與線程
為了讓計算機一次完成多個活動,進程和線程都提供了很好的服務,但它們在操作方式上是有區別的。計算機上運行的所有程序都至少使用一個進程或線程。進程和線程允許處理器在共享計算機資源的同時在多個任務之間平滑切換。因此,程序員的職責是以高效的方式使用線程和進程來**高性能的處理器。線程和進程的實現因可用的操作系統而異。
什麼是一個過程(a process)?
一般來說,一個過程是為了達到特定結果而進行的一系列連續的行動。但是,在計算機世界中,進程是一個正在執行的計算機程序的實例。換句話說,它是一個正在運行的計算機程序的一次出現。簡單地說,進程是運行包含一個或多個線程的二進制文件。
根據進程中涉及的線程數,有兩種類型的進程。它們是單線程進程和多線程進程。顧名思義,單線程進程就是隻有一個線程的進程。因此,這個線程是一個進程,只有一個活動正在發生。在多線程進程中,有多個線程,並且有多個活動正在發生。
兩個或多個進程可以使用進程間通信相互通信。但這是相當困難的,需要更多的資源。當開發一個新的過程時,程序員必須做兩件事。它們是父進程的複製,以及為新進程分配內存和資源。所以這真的很貴。
什麼是一根線(a thread)?
在IT世界中,線程是計算機程序中可以根據時間表獨立管理的最小指令執行量。線程是進程中執行的簡單路徑。線程和進程一樣強大,因為線程可以執行進程可以執行的任何操作。線程是一個輕量級的進程,只需要較少的資源。線程可以讀寫相同的變量和數據結構變量。線程可以很容易地在線程之間進行通信。
今天,多線程已經成為解決許多問題的自然方法。一個大的工作被分成幾個部分,每個部分被分配到一個稱為線程的執行單元。這只是多線程。這需要謹慎的編程,因為線程共享一次由另一個線程修改的數據結構,也因為線程共享相同的地址空間。線程的另一個優點是線程提供了實現並行的有效方法。一個系統的吞吐量可以通過讓多個線程在多個處理器上運行來提高,因為線程是一個獨立的可調度實體。
過程(process)和線(thread)的區別
•進程很難創建,因為它需要父進程的複製和內存分配,而線程則很容易創建,因為它們不需要單獨的地址空間。
•線程用於簡單任務,而進程用於重任務,如執行應用程序。
•進程不共享相同的地址空間,但同一進程中的線程共享相同的地址空間。
•進程彼此獨立,但線程是相互依賴的,因為它們共享相同的地址空間。
•可由多個線程組成。
•由於線程共享相同的地址空間,虛擬化內存只與進程關聯,而與線程無關。但是每個線程都有一個不同的虛擬化處理器。
•每個進程都有自己的代碼和數據,而進程的線程共享相同的代碼和數據。
•每個進程從一個主線程開始,但如果需要,它可以創建額外的線程。
•進程之間的上下文切換比同一進程的線程之間的上下文切換慢得多。
•線程可以直接訪問其數據段,但進程有自己的數據段副本。
•進程有開銷,但沒有線程。
小結:
進程與線程
進程和線程是程序員為了有效地控制處理器和指令在計算機上的執行而使用的兩種技術。一個進程可以包含多個線程。線程提供了一種有效的共享內存的方法,儘管它比進程運行多個執行。因此,線程可以替代多個進程。隨著多核處理器的發展趨勢,線程將成為程序員最重要的工具。
- 多線程示例馬蒂亞斯。坎普(抄送2.0)