Erlang的Mailbox或者MQ的效能問題

2021-05-03 21:51:21 字數 956 閱讀 9730

erlang-questions mailing list上的討論low disk logging performane in smp

caoyuan's blog: a case study of scalability related "out of memory" crash in erlang

caoyuan's blog: async or sync log in erlang - limit the load of singleton process

它們都是關於erlang的mailbox效能問題的。 

所謂mailbox,就是erlang的process用於儲存其他程序發來的尚未處理的訊息的容器。 

根據這些討論我有下面幾點總結: 

不要把mailbox「撐爆」:當mailbox太大的時候,selective receive的效能就會大打折扣。 在第二篇帖子中,作者的甚至把error_logger的mailbox塞到機器out of memory!

如何避免:這幾篇討論這中「撐爆」的mailbox都是日誌process:乙個是error_logger,另乙個是file_logger。 日誌程序的io操作都是比較耗時間的,而傳送來的訊息又太多太快,以至於寫日誌的程序根本來不及處理,訊息只能在mailbox中積累。 所以這在種consumer速度跟不上producer的情況,要盡量減輕consumer(這裡是logger)的負擔,讓操作盡量在producer處完成(比如日誌的格式化操作在傳送者處做好,而不是在logger處)。 另外還可以考慮把logger從singleton變成分布式的。

smp:多核的使用會加劇這種多producer單consumer情形的速度差距,導致效能下降,甚至記憶體溢位。 

根據第一篇中的討論,file:write似乎也是把write的請求發給乙個file server,所以過多的請求也會導致write請求的處理效率低下。 把幾個write請求大包成乙個write請求再傳送過去或許是乙個提高效能的辦法。 

DSP中的Mailbox的學習

在dsp專案開發中,我用mailbox實現了程序間的通訊,通過接收網路控制程序發來的mailbox,實現了雲台的控制,其中需要學習的地方有兩點 一是mailbox通訊機制的學習,二是dsp時間管理機制,這裡先學習一下mailbox的相關知識。mbx模型為mailbox提供了一系列函式支援,比如mbx...

mailbox資料傳送和接收的過程

我們知道在client 在通過mbox send message給controller傳送資料的時候必須指定channel。例如下面的code dc sync mbox dc sync cl,0 populate data packet sp.abc 123 etc send message to ...

Erlang模組與Erlang程式的執行方法

一 模組與程式檔案 erlang是一種函式式程式語言,當我們要完成乙個專案時,總不可能把所有的函式都定義在乙個程式檔案中,為了開發和維護方便,通常按邏輯功能劃分將其分別分散在多個程式檔案中。每個erlang程式檔案就是乙個模組,檔名的副檔名部分為.erl,模組的名稱必須與檔名稱中的主檔名完全相同 不...