java多線程併發筆記

更快地執行

    實現併發最直接的方式是在操作系統級別使用進程。進程是運行在它自己的地址空間內的自包容的程序。多任務操作系統可以通過週期性地將CPU 從一個進程切換到另一個進程,來實現同時運行多個進程(程序),儘管這使得每個進程看起來在其執行過程中都是歇歇停停,進程總是很吸引人,因爲操作系統通常會將進程相互隔離開,因此他們不會彼此干涉,這使得用進程編程相對容易一些。與此相反的是,像Java所使用的這種併發系統會共享諸如內存和 I/O 這樣的資源,因此編寫多線程程序最基本的困難在於在協調不同線程驅動的任務之間對這些資源的使用,以使得這些資源不會同時被多個任務訪問。

    Java採取了更加傳統的方式,在順序語言的基礎上提供對線程的支持。與在多任務操作系統中分叉外部進程不同,線程機制是在由執行程序 表示的單一進程中創建任務。Java採取了更加傳統的方式,在順序語言的基礎上提供對線程的支持。與多任務操作系統中分叉外部進程不同,線程機制是在由執行程序表示的單一進程中創建任務,

    Java的線程機制是搶佔式的,這表示調度機制會週期性地中斷線程,將上下文切換到另一個線程,從而爲每一個線程都提供時間片,使得每個線程都會分配到數量合理的時間去驅動它的任務。 

基本的線程機制

    併發編程使我們可以將程序劃分爲多個分離的、獨立運行的任務。通過使用多線程機制,這些獨立任務(也被稱爲子任務)中的每一個都將由執行線程來驅動。一個線程就是在進程中的一個單一的順序控制流, 因此,單個進程一個擁有多個併發執行的任務,但是你的程序使得每個任務都好像有其自己的CPU 一樣。其底層機制是切分CPU時間,但通常你不需要考慮它。

    線程模型爲編程帶來了便利,它簡化了在單一程序中同時交織在一起的多個操作的處理。在使用線程時,CPU將輪流給每個任務分配其佔用時間。每個任務都覺得自己在一直佔用CPU,但事實上CPU時間是劃分成片段分配給了所有的任務(例外情況是程序確實運行在多個CPU之上)。線程的一大好處是可以使你從這個層次抽身出來,即代碼不必知道它是運行在具有一個還是多個CPU的機器上。所以,使用線程機制是一種建立透明的、可擴展的程序方法,如果程序運行得太慢,爲機器添加一個CPU就能很容易地加快程序的運行速度。多任務和多線程往往是使用多處理器系統的最合理方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章