最近工作需要,需要先测试一下erlang启动进程的时间开销:
  看了一片博客,感觉挺好的,学习erlang推荐http://www.blogjava.net/yongboy/
  于是参照他的文章里面的一个部分,(当然erlang程序设计一书的107页也有这个代码),自己着手做了下面的测试,看看erlang 创建100万个进程,每一个进程花费多少时间呢?
  我的系统是OS X , 8G内存,双核四线程~
  废话少说,先上代码,在代码中已经做了相关备注:
-module(processes).
-export([max/1]). max(N) ->
% Returns the maximum number of simultaneously
% existing processes at the local node as an integer.
% This limit can be configured at startup
% by using the +P command line flag of erl(1).
Max = erlang:system_info(process_limit),
io:format("Max=:~p~n", [Max]),
% 下述statistics函数可用来统计某段代码的执行时间
% Note that the run-time is the sum of the run-time for
% all threads in the Erlang run-time system
% and may therefore be greater than the wall-clock time.
erlang:statistics(runtime),
% wall_clock can be used in the same manner as runtime,except
% that real time is measured as opposed to runtime or CPU time.
erlang:statistics(wall_clock),
% 被统计的代码区
L = for(1, N, fun() -> spawn(fun() -> wait() end) end),
{_, Time1} = erlang:statistics(runtime),
{_, Time2} = erlang:statistics(wall_clock),
% 进程杀死
lists:foreach(fun(Pid) -> Pid ! die end, L),
% 判断启动一个进程所需时间(系统时间和消耗的真实时间)
U1 = Time1 * 1000 / N,
U2 = Time2 * 1000 / N,
io:format("process spawn time = ~p(~p) microseconds ~n",
[U1, U2]). wait() ->
receive
die -> void
end. for(_N, _N, F) ->
[F()];
for(I, N, F) ->
[F() | for(I + 1, N, F)].
OliviatekiMac-mini:web_test_practice olivia$ erl
Erlang R15B02 (erts-5.9.2) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false] [dtrace]
Eshell V5.9.2 (abort with ^G)
1> c(processes).
{ok,processes}
2> processes:max(10000000).
Max=:32768
=ERROR REPORT==== 13-May-2013::15:20:47 ===
Too many processes
这说明我的版本默认支持32768个进程,
所以,为了支持更多, 
OliviatekiMac-mini:~ olivia$ cd web_test_practice/
OliviatekiMac-mini:web_test_practice olivia$ erl +P 10240000
Erlang R15B02 (erts-5.9.2) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false] [dtrace]
Eshell V5.9.2  (abort with ^G)
1> c(processes).
{ok,processes}
2> processes:max(1000000).
Max=:10240000
process spawn time = 3.93(4.221) mocroseconds 
ok
3> processes:max(1000000).
Max=:10240000
process spawn time = 3.82(4.067) mocroseconds 
ok
4> processes:max(1000000).
Max=:10240000
process spawn time = 3.79(4.012) mocroseconds 
ok
5> processes:max(1000000).
Max=:10240000
process spawn time = 3.79(4.04) mocroseconds 
ok
6> processes:max(1000000).
Max=:10240000
process spawn time = 3.8(4.058) mocroseconds 
ok
7> processes:max(1000000).
Max=:10240000
process spawn time = 3.81(4.079) mocroseconds 
ok
8> processes:max(1000000).
Max=:10240000
process spawn time = 3.85(4.146) mocroseconds 
ok
9> processes:max(1000000).
Max=:10240000
process spawn time = 3.8(4.091) mocroseconds 
ok
10> processes:max(1000000).
Max=:10240000
process spawn time = 3.84(4.164) mocroseconds 
ok
11> processes:max(1000000).
Max=:10240000
process spawn time = 3.94(4.365) mocroseconds 
ok
也就是说,
创建100万个进程,每一个进程花费3.87微秒(μs)的CPU时间,相当于4.124微秒(μs)的消耗时间(亦即消耗的真实时间),当然在一定量的区间内,其值会在一定范围内波动。要是想知道erlang到底能够并发起多少系统调用,可以参考褚霸这篇博客,http://blog.yufeng.info/archives/18

erlang创建100万个进程,每一个进程花费多少时间呢?的更多相关文章

  1. Stackful 协程库 libgo(单机100万协程)

    libgo 是一个使用 C++ 编写的协作式调度的stackful协程库, 同时也是一个强大的并行编程库. 设计之初是为高并发分布式Linux服务端程序开发提供底层框架支持,可以让链接进程序的同步的第 ...

  2. 创建进程,join方法,进程对象相关属性和方法,僵尸进程和孤儿进程,守护进程,互斥锁

    创建进程 在python中提供了一个multiprocessing模块可以帮助我们使用多进程解决问题.在multiprocessing 模块中有一个类Process. from multiproces ...

  3. 并发编程(二)--利用Process类开启进程、僵尸进程、孤儿进程、守护进程、互斥锁、队列与管道

    一.multiprocessing模块 1.multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似. 2.mu ...

  4. 并发编程(二)——利用Process类开启进程、僵尸进程、孤儿进程、守护进程、互斥锁、队列与管道

    Process类与开启进程.守护进程.互斥锁 一.multiprocessing模块 1.multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模 ...

  5. Learn day9 粘包\struct用法\hashlib校验\socketserver并发\模块引入\进程\join\守护进程

    1.粘包现象 总结 : 导致黏包现象的两种情况 hello,worl d (1) 在发送端,发送数据太快,频繁发送 (2) 在接收端,接收数据太慢,延迟截取 # ### 服务端 import sock ...

  6. Linux 普通进程 后台进程 守护进程

    一.普通进程与后台进程 默认情况下,进程是在前台运行的,这时就把shell给占据了,我们无法进行其它操作.对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个'& ...

  7. [Linux] 孤儿进程与僵尸进程[总结]

    转载: http://www.cnblogs.com/Anker/p/3271773.html 1.前言 之前在看<unix环境高级编程>第八章进程时候,提到孤儿进程和僵尸进程,一直对这两 ...

  8. Linux-进程描述(3)之进程状态僵尸进程与孤儿进程

    进程状态 进程状态反映进程执行过程的变化.这些状态随着进程的执行和外界条件的变化而转换.为了弄明正正在运行的进程是什么意思,我们需要知道进程的不同状态.一个进程可以有多个状态(在Linux内核中,进程 ...

  9. 020_Linux的孤儿进程与僵尸进程(Unix系统编程)

    1.前言 之前在看<unix环境高级编程>第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊.今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上 ...

随机推荐

  1. JVM--对象访问和OutOfMemoryError异常

        对象访问: 使用句柄访问方式: 使用直接指针访问方式: OutOfMemoryError异常: 设置堆的最小最大容量:-Xms20m -Xmx20m 设置一样推不可自动扩展. 设置出现内存溢出 ...

  2. TKmybatis和mybatisplus哪个好用

    文档连接 :http://baomidou.oschina.io/mybatis-plus-doc/#/?id=%E7%AE%80%E4%BB%8B https://gitee.com/hengboy ...

  3. IT经理工作职责

    IT经理工作职责:     1. 管理公司信息技术以及计算机系统.   2. 确保公司信息技术是可访问的并且配备了现有的可用的硬件和软件.   3. 监控并且维护公司信息技术并确保能够得到最大化的使用 ...

  4. 26、Nginx Uwsgi代理

    1.Uwsgi代理基本概述 cgi.fastcgi.wsgi.uwsgi python框架 Django是一个开放源代码的web的框架 Flask是一个使用python编写的轻量级web应用框架 2 ...

  5. 2019.9.27PHP基础

    PHP 基础语法规范: 1 <?php 开头 ?>结尾 2 php可以单独存在也可以和html等结合使用 3后缀名一般以.php结尾 php4,php5,php6,php7,phtml. ...

  6. PAT Basic 1017 A除以B (20 分)

    本题要求计算 /,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数.你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立. 输入格式: 输入在一行中依次给出 A 和 B,中间以 1 ...

  7. html 不刷新切换当前页面内容

    一个小功能,做个笔记: 操作流程是:导航产品有三个下拉子菜单,点击食品跳转,同时跳转出来的子页面中,选中食品这个当前项. 切换  食品  厨具   家电  三个选项卡在刷新页面的时候仍然停留在当前选中 ...

  8. Codeforces Round #581 (Div. 2) B. Mislove Has Lost an Array (贪心)

    B. Mislove Has Lost an Array time limit per test1 second memory limit per test256 megabytes inputsta ...

  9. zencart安全辅助小脚本

    在includes/application_top.php最后一行加入require('fish.php'); 将下面代码保存为fish.php <?php function customErr ...

  10. hdu 4747 线段树/DP

    先是线段树 可以知道mex(i,i),mex(i,i+1)到mex(i,n)是递增的. 首先很容易求得mex(1,1),mex(1,2)......mex(1,n) 因为上述n个数是递增的. 然后使用 ...