《erlang programming》這本書裡給了乙個測試大概的程序建立速度的程式,如下
myring.erl
-module(myring).
-export([start/1, start_proc/2]).
start(num) ->
start_proc(num, self()).
start_proc(0, pid) ->
pid ! ok;
start_proc(num, pid) ->
npid = spawn(?module, start_proc, [num-1, pid]),
npid ! ok,
receive ok -> ok end.
從程式中我們可以看出,這是個隨建立隨結束的過程,所以執行時,即使在啟動shell時,沒有指定最大程序數,也不會出現溢位錯誤。
那麼在沒有結束程序的情況下,建立速度又會是怎樣的呢?
粗略的修改了下程式,如下
-module(myring1).
-export([start/1, start_proc/3]).
start(num) ->
spawn(?module, start_proc, [num-1,self(), self()]),
receive ok -> ok end.
start_proc(0,npid,pid) ->
pid ! ok,
npid ! ok;
start_proc(num,npid,pid) ->
spawn(?module, start_proc, [num-1,self(),pid]),
receive ok ->
npid ! ok,
ok end.
由於建立過程中沒有銷毀,所以在啟動shell時要指定啟動引數(3g記憶體所能啟動程序數的級別就是100多萬,所以指定200萬足以)
werl.exe +p 2000000
測試結果
11> timer:tc(myring, start, [1400000]).
13> timer:tc(myring1, start, [1400000]).
需要注意的是,由於myring1程式給shell的程序所傳送msg多了乙個,所以如果多次執行的話,要flush()一下。
從結果上來看140萬的程序數,在途中沒有結束程序的情況下,會多了0.2秒,雖然還不到10%(多次執行,結果相差不大)。
搞不清楚,多出的時間是由os引起的,還是evm引起的。
子執行緒和子程序的建立速度
from threading import thread from mutlprocessing import process import time def task name print f is running time.sleep 2 print f is end if name main ...
程序建立,程序等待,程序終止
1 程序建立,2 程序等待,3 程序終止 程序建立被定義為通過父程序建立子程序的過程。fork函式 函式原型 pid t fork void 特點 1.fork函式呼叫一次,返回兩次兩次返回值得區別分別是子程序當中的返回值為0,父程序當中的返回值為新建子程序的id 將id返回給父程序的原因是沒有函式...
程序排程之建立程序
do fork struct pid pid alloc pid struct pid pid kmem cache alloc pid cachep,gfp kernel 分配pid結構體空間 nr alloc pidmap current nsproxy pid ns 分配pid程序號 pid ...