在併發編程中有兩個基本的機率就是進程和線程。在Java編程中併發編程更多的是關注線程。可是進程也是很重要的。編程
一個計算機通常會有不少活躍的進程和線程。有一點是沒有疑問的在單核系統中,任什麼時候候實際上都是隻會有一個一個線程在運行。單核的系統的處理時間是按照OS中的時間片功能來在進程和線程之間共享的。擁有多個處理器或者擁有多核的處理器對於計算機系統來講是愈來愈廣泛的事情。這個極大的提升了併發進程和線程的系統處理能力,可是即便在沒有多個處理器或者多核的簡單系統中,計算機的併發也是存在的。併發
每一個進程都有本身的運行環境。一個進程通常會有一個完整的私有的基本的資源集,特別的是每一個進程都有本身的內存空間。socket
進程一般被認爲是程序和應用是同步的關係。可是,咱們看起來是一個單獨的進程其實有多是多個進程共同做用的結果。爲了方便進程之間的通訊,大部分的操做系統都是支持IPC(進程間通訊),好比:pipe和socket.IPC 不單單用於相同系統之間的進程通訊還適用於不一樣系統之間的進程通訊。ui
JVM的大部分實現都是做爲一個單獨的進程的。而一個Java應用能夠經過 ProcessBuilder 對象來建立其餘的進程。操作系統
線程被稱爲輕量級的進程。進程和線程都提供了運行環境,可是建立一個線程比建立一個進程耗費更少的資源。線程
線程存在於進程內部--也就是說每一個進程至少會有一個線程。線程共享進程的資源,包括內存和打開的文件。這個會通訊更加有效可是也會存在問題。對象