1. 程式人生 > >軟件構造 並發1

軟件構造 並發1

運行 避免 發送 並發模型 代碼 eight 兩種方法 ble ID

並發:多個運算同時發生。
並發模型:共享內存 消息傳遞
共享內存:並發模塊通過在內存中讀寫共享對象進行交互

①兩個處理器共享物理內存②兩個程序共享文件③兩個線程(同一個java程序)共享對象

技術分享圖片

消息傳遞:並發模塊通過通信通道相互發送消息進行交互。模塊發送消息,並將傳入的消息發送到每個模塊以便處理

①網絡中兩臺計算機通信②web瀏覽器web server③即時消息的客戶端和服務器④通過管道連接兩個程序的輸入和輸出

技術分享圖片


進程 線程兩種不同的並發模塊
進程:正在運行程序的一個實例,擁有自己私有專用的內存空間
抽象為虛擬計算機(擁有獨立的執行環境和完整的資源)①通常不共享內存,不能訪問其他進程的內存或對象,需特殊機制才可實現進程間共享內存
(應用程序可能為一組協作進程) ②進程通信采用的是消息傳遞

方式
線程:正在運行程序的一個執行路徑(一個進程可對應多個線程),線程有自己的堆棧和局部變量,但多個線程共享內存空間
抽象為虛擬處理器(輕量級進程)①線程與進程中的其他線程共享相同的資源(內存,打開文件),線程存在於進程內。
②線程采用內存共享機制通信,需特殊處理才能實現消息傳遞和私有內存

技術分享圖片

JAVA提供了並發編程的庫函數java.util.concurrent

每個應用程序至少有一個線程。從main線程開始,創建其他的線程
創建線程的兩種方法:①創建Thread類
Thread類本身實現了Runnable接口,但是run方法什麽都沒做,應用程序繼承Thread,提供自己的run()實現。
調用Thread.start()啟動新線程。

技術分享圖片
②實現Runnable接口,作為參數傳遞給new Thread()構造函數

技術分享圖片

Runnable接口定義了一個方法run(),包含在線程中執行的代碼。Runnable對象被傳遞給Thread構造函數。調用Thread.start()啟動新線程

技術分享圖片

慣用法:用一個匿名的Runnable啟動一個線程,它避免了創建類名的類。

技術分享圖片

軟件構造 並發1