erlang定時器的強度測試

2021-08-30 05:25:54 字數 1196 閱讀 9044

併發開n個程序 每個程序裡面0-10秒的隨機定時,模擬tcp超時的情況。每個定時器事件的流程是這樣的 程序檢查訊息佇列 沒訊息 註冊定時器事件 程序換出 定時器超時 程序換入 處理定時器事件。

root@nd-desktop:~/test# cat ttimer.erl

-module(ttimer).

-export([start/1]).

upmap(f, l) ->

parent = self(),

ref = make_ref(),

[receive -> result end

|| _ <- [spawn(fun() -> parent ! end) || x <- l]].

loop(0)->

ok;loop(cnt)->

receive after random:uniform(10000) -> cont end,

loop(cnt-1).

start([a1, a2]) ->

start= now(),

n= list_to_integer(atom_to_list(a1)),

cnt = list_to_integer(atom_to_list(a2)),

io:format("spawn ~w process, loop ~w~n", [n, cnt]),

upmap(fun loop/1, lists:duplicate(n, cnt)),

io:format("run ~w ms~n", [round(timer:now_diff(now(), start) /1000)]),

done.

root@nd-desktop:~/test# erl -smp disable -noshell +p 9999999 -s ttimer start 500000 10 -s erlang halt

spawn 500000 process, loop 10

run 63201 ms

單cpu保持在70-80%, 63秒處理了500w個定時器事件, 大概每秒8w.

root@nd-desktop:~/test# cat /proc/cpuinfo

model name : pentium(r) dual-core cpu e5200 @ 2.50ghz

bogomips : 4987.08

結論: 定時器處理還是比較費時間的。

Mysql 檢視定時器 開啟定時器 設定定時器時間

1.檢視是否開啟evevt與開啟evevt。1.1 mysql evevt功能預設是關閉的,可以使用下面的語句來看evevt的狀態,如果是off或者0,表示是關閉的。show variables like sche 1.2 開啟evevt功能 setglobal event scheduler 1 ...

定時器 STM32定時器 基本定時器1

我是鼎!定時器時鐘一定要明確其中有哪些變數。上圖為stm407資料手冊摘出來的,可能看不清楚,其實就蘊含了幾點資訊。注意一點,我們看圖2,我們以apb1舉例,上面掛著很多的外設,包括usart1 adc 以及定時器,我們知道apb1上面最高時鐘頻率為84mhz,但是定時器的時鐘是要在此基礎上乘2,也...

Mysql 檢視定時器 開啟定時器 設定定時器時間

1 1.檢視是否開啟evevt與開啟evevt。23 1.1 mysql evevt功能預設是關閉的,可以使用下面的語句來看evevt的狀態,如果是off或者0,表示是關閉的。4 show variables like sche 5 1.2 開啟evevt功能 6 set global event ...