進程、線程與JVM、CLR

jopen 9年前發布 | 25K 次閱讀 JVM Java開發

進程和線程的關系:

網上有一副很經典的圖可以讓我們來理解進程和線程的關系:

下面這副圖是一個雙向多車道的道路圖,假如我們把整條道路看成是一個“進程”的話,那么圖中由白色虛線分隔開來的各個車道就是進程中的各個“線程”了。

進程、線程與JVM、CLR

這副圖出自:http://www.blogjava.net/pengpenglin/archive/2008/09/02/226292.html 

一些說明:

  • 這些線程(車道)共享了進程(道路)的公共資源(土地資源)。

    </li>

  • 這些線程(車道)必須依賴于進程(道路),也就是說,線程不能脫離于進程而存在(就像離開了道路,車道也就沒有意義了)。

    </li>

  • 這些線程(車道)之間可以并發執行(各個車道你走你的,我走我的),也可以互相同步(某些車道在交通燈亮時禁止繼續前行或轉彎,必須等待其它車道的車輛通行完畢)。

    </li>

  • 這些線程(車道)之間依靠代碼邏輯(交通燈)來控制運行,一旦代碼邏輯控制有誤(死鎖,多個線程同時競爭唯一資源),那么線程將陷入混亂,無序之中。

    </li>

  • 這些線程(車道)之間誰先運行是未知的,只有在線程剛好被分配到CPU時間片(交通燈變化)的那一刻才能知道。

    </li> </ul>

    線程的生存期

    當安排執行一個線程后,這個線程會經歷幾個狀態,包括:未啟動,激活,睡眠狀態等,如下圖顯示的線程的生存期:

    進程、線程與JVM、CLR

    此圖來自《c#線程參考手冊》,這本書的電子版在CSDN有下載:http://d.download.csdn.net/down/1493065/phs415

    如果使用Java,看下面圖更容易點,其實他們描述的意思完全一樣:

    進程、線程與JVM、CLR

    JVM 與 進程,線程

    Java編寫的程序都運行在在Java虛擬機(JVM)中,每用java命令啟動一個java應用程序,就會啟動一個JVM進程。在同一個JVM進 程中,有且只有一個進程,就是它自己。在這個JVM環境中,所有程序代碼的運行都是以線程來運行的。JVM找到程序程序的入口點main(),然后運行 main()方法,這樣就產生了一個線程,這個線程稱之為主線程。當main方法結束后,主線程運行完成。JVM進程也隨即退出。

    如下圖所示:

    進程、線程與JVM、CLR

    上述資料參看:

    JVM和JRE淺談 
    http://blog.csdn.net/liufeng_cp/archive/2008/07/18/2674317.aspx

    Java多線程編程總結 
    http://lavasoft.blog.51cto.com/62575/27069

    Java 由于要考慮跨平臺,所以它跟進程,線程的模型比較簡單, .Net 則復雜些了:

    .Net CLR、 進程, 應用程序域, 線程

    進程、線程與JVM、CLR

    說明:

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!