Java 並發編程(一)進程與線程


本篇博客介紹下進程與線程的區別。

1. 進程與線程

在現有的並發編程中,有兩個重要的執行單元:進程與線程。在Java變成語言中,與並發編程相關的通常是線程。然而,進程也同樣重要。

一個計算機系統通常會有許多的活動進程和線程。即使當系統只有一個執行內核時(也就是在一個給定的時間,只有一個線程在運行),該系統也支持多個進程與線程。單一內核的執行時間被進程和線程共享,該特性我們稱之為時間片(time slicing)。

計算機系統擁有越來越多的處理器,或者多個內核的處理器。這極大地增加了系統並發執行進程和線程的能力,但是我們要記得,即是在單一處理器內核的計算機上,並發執行也是可以的。

1.1 進程

每個進程擁有自己獨立的執行環境。一個進程通常會擁有獨立的、私有的運行時資源集合,特別是,每個進程擁有自己的內存空間。

進程通常被理解為程序或應用的同義詞。但是,用戶看到的一個程序卻可能包括多個協同的進程。為了支持多個進程間的通信,大部分系統支持進程間通信(Inter Process Communication, IPC)資源,例如管道或者sockets通信。IPC通信不僅僅用在同一系統上的不同進程,也使用於不同系統上的不同進程。

大部分的java虛擬機實現都是單一進程的(意味着,我們的java程序大部分都是單一進程),我們可以使用ProcessBuilder對象來建立額外的進程。

1.2 線程

線程有時會被成為輕量級的進程。進程和線程都會提供一個執行環境,但是新建一個線程需要更少的資源。

線程存在與進程之間——每個進程至少存在一個線程一個進程的多個線程共享該進程所有的資源,包括內存和打開的文件。這提供了有效的通信,同時也會引入錯誤。

多線程執行是Java平台的一個重要特性。每個應用至少包括一個線程或者多個(如果你把執行內存管理、信號處理等工作的系統線程計算在內的話)。但是,從程序開發者的角度來看,從一個線程開始,該線程稱為主線程(main thread)。該線程可以新建並執行其他線程,我們在下節介紹。

本文翻譯自Java Tutorials, Processes and Threads,翻譯難免會有紕漏,歡迎讀者討論指正。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com