Erlang创建进程到底有多快?

2009-03-09

为了证实Erlang传说中“Crazy Fast”的进程创建速度,今天特意在自己机上(AMD 3600+ 双核,1G内存,Ubuntu 8.10操作系统)测试了一下Erlang创建进程的时间,所用代码如下:

-module(test).

-export([start/1]).

%记录开始时间并开始生成指定数量进程

start(Num) ->

statistics(wall_clock),

spawnProcesses(Num).

%所有进程生成完后输出所耗时间

spawnProcesses(0) ->

{_,Time}=statistics(wall_clock),

io:fwrite(”Total Time : ~p\n”,[Time]);

%生成进程

spawnProcesses(Num) ->

spawn(fun() -> doSomething(Num) end),

spawnProcesses(Num-1).

%什么都不做的进程~~

doSomething(Num) -> Num.

运行Erlang虚拟机编译&运行:

1> c(test).

{ok,test}

2> test:start(1000000).

4768

….

统计结果表明Erlang生成一百万个进程约需4.7秒,亦即平均下来生成一个进程仅需4.7us,确实是很短的时间了~~但没有对比说明不了什么,与C生成线程的速度比哪个更快些呢?马上写段C代码看看:

#include

#include

#include

//什么都不干的线程~~

void thread(){}

//主函数

int main(){

int i;

clock_t start,end;

//记录开始时间

start=clock();

//生成很多很多线程

for(i=0;i<100000;i++){

pthread_t id;

pthread_create(&id,NULL,(void *)thread,NULL);

}

//记录结束时间

end=clock();

double time=(double)((end-start)/CLOCKS_PER_SEC);

printf(”Total Time : %f\n”,time);

}

编译运行命令如下:

gcc test.c -lpthread

./a.out

统计表明C生成十万进程就已经需要接近4秒了,比Erlang慢了接近10倍,看来Erlang疯快的轻量级进程不是浪的虚名的~~不过有好长时间没写C了,如果上面代码或测试方式有任何问题,欢迎留言提出大家讨论讨论~~

M-OSCAR | Powered by Blogger | Entries (RSS) | Comments (RSS) | Designed by MB Web Design | XML Coded By Cahayabiru.com