erlang r15的一項新特性是可以通過dtrace或systemtap跟蹤虛擬機器中的各種行為(參見 通過這些跟蹤資訊可以從旁觀者的角度窺探到erlang的工作原理。
編寫了乙個小程式,把跟蹤資訊畫出來,如下圖所示。這個跟蹤的跟蹤物件是乙個名為random的benchmark程式。random建立出n個程序,每個程序隨機生成100000個整數,然後對這些整數進行排序,再將排序後的列表分為兩半,將第二半的第乙個數,即整個整數列表的中位數,通過訊息傳送給主程序。很明顯這是乙個並行度為n的計算密集型任務,每乙個並行任務之間沒有任何依賴性。這個跟蹤在乙個8核機器上建立了9個計算程序。如圖所示,橫軸上的數字表示自程式開始執行的時間,縱軸的數字表示處理器核心的編號,除了最後一行之外每一行表示乙個處理器核心上的程序運**況。
從圖中可以看出,處理器1上建立出了9個程序,然後有7個程序分別被排程器遷移到了其他7個處理器上。剩下的兩個程序在處理器1上round robin排程。處理器7執行完了唯一的程序之後,從處理器1上竊取了乙個程序。處理器1繼續執行剩下的那個程序。處理器7上執行的這個程序之後又被遷移到了處理器0上。這個圖縮小了很多倍適合乙個螢幕顯示,其實每乙個處理器上的程序執行被切斷為很多時間片(也就是reduction片),只不過縮小了之後看不出來時間片之間的排程器開銷了。放大的片段如下圖所示:
從中可以看出在處理器1上兩個程序的交替執行。色塊和色塊之間的白色間隙就是排程的開銷。
Erlang併發機制 程序排程
erlang erlang排程器主要完成對erlang程序的排程,它是erlang實現軟體實時和程序之間公平使用cpu的關鍵。erlang執行時,有4種任務需要被排程 程序,port,linked in driver,erlang虛擬機器的系統級活動。erlang排程器主要有以下特點 1.程序排程執...
函式式程式設計一窺,真的只是一窺
適用場合 平行計算 很適合如今的多核cpu 數學推理 函式式程式設計是一種程式設計模型,他將計算機運算看做是數學中函式的計算,並且避免了狀態以及變數的概念 結論 函式式程式設計是一種風格 與程式語言無關,物件導向也是一種風格 與程式語言無關,兩種風格並不矛盾,可以結合的 叫 functional o...
CFS排程器(一)
關於排程類和優先順序的概念,前面的文章 排程器概述 中已經做了介紹了,本文不在重述。本文主要關注的就是cfs排程器,或者叫做fair sched class排程類。這種排程器是被sched normal sched batch這兩種排程策略使用的。本文基於linux4.0 提到排程器涉及到兩個問題 ...