程序建立速度

2021-08-30 05:06:38 字數 1457 閱讀 9840

《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 ...