1. 程式人生 > >任務並行的幾種方式

任務並行的幾種方式

一系列的任務能夠並行的無衝突的分配給若干任務處理機處理,我們把這種任務的處理方式成為並行任務處理。

並行任務的處理關鍵在過各個處理機處理的任務處理互相獨立,也就是構建一個無衝突的任務環境。最簡單的無衝突模型,就是能夠明確標識某任務分給了具體的某個任務處理機,該處理機獨享該任務的處理許可權。常見有如下方式的並行:

1、多執行緒並行任務:

基於多執行緒的併發任務設計,把不同的任務分配給作業系統某個程序的多個執行緒去處理,這樣,各個執行緒只負責處理已分配的獨享許可權的任務,從而實現在單臺處理機上的任務併發。 然而多執行緒的這種併發只是一種使用者態的併發,也就是說這種併發只是讓使用者看起來是併發的。因為多個執行緒共享一個程序的cpu處理資源,多個執行緒通過輪流切換暫用cpu空閒時間片的從而獲得類似於並行的處理。實際上對一個程序而言在cpu上仍然是序列處理的。如果每個執行緒處理的任務時本身耗費的cpu資源是巨大的,那麼導致cpu空閒時間片減少,很可能處理的效率尚不如一個序列處理機處理所有的任務,因為執行緒的輪流切換本身就是一個很耗費資源的操作。因此程序中建立執行緒太多的場景不適合採取執行緒併發方式。

2、cpu多核的並行任務:

充分利用多核cpu的的每一個核去構建並行程式,而非像多執行緒那樣去共享一個cpu核的程序資源,這種並行處理是高效的,然而基於這種方案的並行設計很可能比較複雜,工程實施和維護的代價也比較高

3、並行任務本身的併發

更高層面的併發設計,他脫離了執行緒和程序層面,他把某個具體的任務和具體的處理機提前建立一個對應的map關係,任務處理機僅僅負責處理和他建立對應關係的任務,而對單個處理機而已僅僅是一個序列的任務處理機,這樣整個併發模型的構建具有很強的靈活性和穩定性,尤其適應企業分佈的環境的任務處理,更為直觀的表示如下。

如上圖,任務分發程式負責建立具體某個任務和處理機的map對應關係,既任務分發程式實現任務的無衝突分配。實際上我們可以大膽假設,如果任務分發程式的分發速度比N太處理機的處理速度慢時,它本身就會變成一個任務處理速度的瓶頸。

任務的分發需要一個類似於"任務分發程式"的東西,它會根據各個機器的實際負載執行情況主動的有預測性的給各個處理機分發任務,這種想法和實施也許是直觀的簡單的易於理解的。

但是作為一個分發程式需要主動的去採集各個處理機的資料,衡量每一個機器的執行情況,然後幾乎在同一個時間分配每個機器不均等的任務量,顯然是比較吃力的,對於處理機而言這種處理方式也是被動的。

假設,每個處理機衡量自己的處理情況,然後在一定的設定條件下主動觸發向分發處理程式請求一定量的處理任務,然後任務處理機接受到請求訊號後響應一個的任務佇列給處理機。(如下圖,處理機在當前任務處理剩下15%時出發任務請求訊號請求分發程式分發任務)我們把這種處理機主動發起任務請求,分發程式響應一個任務佇列的方式,稱之為請求分發模型。

顯然,處理速度快的處理機向任務分發程式傳送任務請求的頻次就會增加,從而達到"能者多勞,適量分配,求總體高效"的目的。

反之,亦然;

極端情況,某臺處理機down掉,就不會向任務分發程式傳送請求任務的訊號。

這種處理模型,可以避免請求分發程式成為排程的瓶頸。適用於分散式系統下多處理器併發任務處理。

相關推薦

PHP實現定時任務方式

選項 等待 process 一個 temp 表示 服務器 實現 ref 關於定時任務,之前以前認識了一種最常用的:crontab定時任務。通過linux的定時任務去實現。今天又認識了一下php實現定時方式的其它方式,總結一下。 一 服務器定時任務 服務器定時任務,其實就是u

PHP實現定時任務方式和詳解

定時執行任務對於一個網站來說,是一個比較重要的任務,比如定時釋出文件,定時清理垃圾資訊等,現在的網站大多數都是採用PHP動態語言開發的,而對於PHP的實現決定了它沒有Java和.Net這種AppServer的概念,而http協議是一個無狀態的協議,PHP只能被使用者觸

Java併發執行任務方式

背景 在編寫業務程式碼時經常遇到併發執行多個任務的需求,因為序列執行太慢,會影響業務程式碼效能。特別對於直接面向普通使用者的業務來說使用者體驗至關重要,保證使用者體驗重要的一點是要“快”。業務程式碼中經常需要呼叫其它業務介面或者同時從多個數據源取資料再處理等,

spark-2.0.0提交jar任務方式

對應引數改為適合自己的模式即可 //(叢集模式)限制資源,後臺執行 spark-submit --class test.Streamings --master spark://10.102.34.248:7077 --deploy-mode cluster --execu

淺談spring配置定時任務方式

property span 文件 觸發器 cron artifact 今天 方式 cap 網上看到好多關於定時任務的講解,以前只簡單使用過註解方式,今天項目中看到基於配置的方式實現定時任務,自己做個總結,作為備忘錄吧。 基於註解方式的定時任務   首先spring-mv

任務並行方式

一系列的任務能夠並行的無衝突的分配給若干任務處理機處理,我們把這種任務的處理方式成為並行任務處理。 並行任務的處理關鍵在過各個處理機處理的任務處理互相獨立,也就是構建一個無衝突的任務環境。最簡單的無衝突模型,就是能夠明確標識某任務分給了具體的某個任務處理機,該處理機獨享該任

使用java配置定時任務配置方式及示例

遞增 exc trigge strong trigger except 字符 ssi uart Spring定時器,主要有兩種實現方式,包括Java Timer定時和Quartz定時器! 1.Java Timer定時 首先繼承java.util.TimerTask類實現

Java 定時任務實現方式

java作業調度 tails 監聽器 ever 觸發 posit exist ttr 輕量級 JAVA實現定時任務的幾種方式 @(JAVA)[spring|quartz|定時器]   近期項目開發中需要動態的添加定時任務,比如在某個活動結束時,自動生成獲獎名單,導出exce

檢視YARN任務日誌的方式

1、通過history server 通過history server,直接在web ui上檢視(如果任務異常退出,可能會看不到) All Applications application application log 2、通過yarn命令(使用者要和提交任務

定時任務實現的方式

定時任務實現的幾種方式: Timer:這是java自帶的java.util.Timer類,這個類允許你排程一個java.util.TimerTask任務。使用這種方式可以讓你的程式按照某一個頻度執行,但不能在指定時間執行。一般用的較少。 ScheduledExec

java定時任務實現的方式

   在開發測試工具的應用後臺,經常聽到同事說要做個定時任務把做日誌處理,或者資料清理,包括做些複雜的業務計算邏輯,在選擇定時任務的時候,怎麼能夠快速實現,並且選擇一種更適合自己的方式呢? 我這裡把定時任務的實現收集整理了一些方法,希望可以幫到剛開始做定時任務的同學,寫得不對的地方請指正。 一  Jav

檢視spark任務日誌的方式

    spark執行的任務往往通過web來檢視,但是,當執行的是sparkStreaming任務時,日誌往往會很大,web檢視並不方便,因此需要定位到伺服器上去看。下面將分別介紹兩種檢視driver端和executor端日誌的方式。一、web端日誌的檢視:下面是四個yarn

java目前可以通過以下方式進行定時任務

開發十年,就只剩下這套架構體系了! >>>   

Eclipse安裝svn插件的方式 轉帖....

如果 version name feature help sin 鏈接 exe 文件 Eclipse安裝svn插件的幾種方式 1.在線安裝: (1).點擊 Help --> Install New Software... (2).在彈出的窗口中點擊add按鈕,輸

解決瀏覽器跨域的方式

doc cor 求和 對象 跨域 http onf 從服務器 console 1、什麽是跨域問題 在頁面中使用js訪問其他網站的數據時,就會出現跨域問題,比如在網站中使用ajax請求其他網站的天氣、快遞或者其他數據接口時,以及hybrid app中請求數據,

前端跨域方式

div ner dev 修改 ati hash 標簽 nbsp 端口 跨域問題的直接原因是瀏覽器存在同源策略,瀏覽器同源指的是:兩個頁面的協議、端口和主機相同,則兩個頁面具有相同的源。IE下滿足協議、主機相同,就認為是同源。 想象一下,如果沒有同源策略,誰都可以修改你站點

Python 與 C/C++ 交互的方式

pythonpython作為一門腳本語言,其好處是語法簡單,很多東西都已經封裝好了,直接拿過來用就行,所以實現同樣一個功能,用Python寫要比用C/C++代碼量會少得多。但是優點也必然也伴隨著缺點(這是肯定的,不然還要其他語言幹嘛),python最被人詬病的一個地方可能就是其運行速度了。這這是大部分腳本語言

php中實現頁面跳轉的方式

腳本 timeout location clas replace asc idt lee 實現 親測,not復制粘貼 PHP中實現頁面跳轉有一下幾種方式,看了幾個人寫的不是很條理,自己整理一下 在PHP腳本代碼中實現 <?php header("locati

Java 修改編碼格式的方式

格式 text cnblogs 修改 .com pac 方式 src -1 1、工作空間 workspase Window→Preferences→General→Workspace→Text file encoding→other→UTF-8 2、項目編碼格式 右鍵項目

Oracle數據庫遷移的方式

備份與恢復 行遷移 target span spf 位置 server create 設備 面試: 一、exp/imp邏輯備份與恢復: 二、Storage存儲遷移: 將數據文件、控制文件、日誌文件、spfile掛到新機器上,然後在新機器上啟動數據庫。 三、利用data gu