併發開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 ...