erlang在smp模式下 默认开启的线程数目是 4 + 调度器数量 + 异步线程的数量。 其中调度器默认=cpu的数目 异步线程的数量默认是0, 可以通过 +A来设置,主要用于文件异步IO操作。 对于现在的机器 可能有大量的cpu 那么默认开启的线程可能多达几十个。 众所周知,32位系统下用户空间的线性地址是3G. 每个线程都有自己的堆栈,虽然实际使用的空间不大, 但是为了预防大量的递归调用什么的,这个堆栈的空间会开的比较大。默认是每个线程
[root@localhost ~]#
ulimit -s
10240 有10M这么大。 几十个线程就占用了大几百M的线性空间。对于3G地址,使用率非常低。
在最新发布的R13B02就专门解决这个问题:
erl +A N
+a StackSize 异步线程
默认是 ERTS_ASYNC_THREAD_MIN_STACK_SIZE
#define ERTS_ASYNC_THREAD_MIN_STACK_SIZE 16 /* Kilo words */
#define ERTS_ASYNC_THREAD_MAX_STACK_SIZE 8192 /* Kilo words */
erl +S N:N
+sss StackSize 调度器线程
默认是 -1, 由系统决定。
#define ERTS_SCHED_THREAD_MIN_STACK_SIZE 4 /* Kilo words */
#define ERTS_SCHED_THREAD_MAX_STACK_SIZE 8192 /* Kilo words */
注意上面的单位是 WORD, 而不是BYTE.
通过微调pthread的stacksize,而不是使用系统默认的。
stack size (kbytes, -s) 8192
还有的4个辅助线程,erts已经把stack_size修改成最小了,各位无需担心。
R13B02为了支持最小的调度器线程堆栈,特地修改了部分BIF, 尽量不采用递归的方式, 减少了堆栈的使用。
当然最好的方法是使用64位操作系统,彻底回避这个问题。
结论:32位系统会比较快,但是有线性地址的限制,节约点是好事。
分享到:
- 2009-09-24 19:48
- 浏览 1885
- 评论(0)
- 论坛回复 / 浏览 (0 / 1326)
- 查看更多
相关推荐
LTE 物理层协议 R13
ECE R13H
android sdk windows r13 android sdk windows r13
R8、R11和R13版本的DYNA关键字手册
CAE仿真求解-LS-DYNA-使用手册-manual-V1-R13版本 在设置控制卡片和关键词等方面给予参考
android-ndk-r13b
android-ndk-r13b-windows-x86_64 稳定版 platforms包含9-24
最新3gpp测试规范,R13的,主要针对UE的射频测试规范的测试limit。
usb_driver_r13-windows You can use the ADB Driver to connect the mobile (powered by android) to the computer and transfer data between the mobile and the computer. 您可以使用 ADB Driver 将手机(由 ...
CAE仿真求解-LS-DYNA-使用手册-manual-V2-R13版本 在设置控制卡片和关键词等方面给予参考
Android NDK R13 所有平台(Win 64/32, Linux, Mac) 给各位不方便科学上网的鞋童一个方便~
利用这个软件可以在AutoCAD R14\2000\2004之间转换。 我需要积分,但不情愿提高分值,因为资源本该共享,是不该设置障碍的
6SigmaET练习教程 R13_液冷散热.pdf
android-ndk-r13b-windows-x86_64 官网版
CAE仿真求解-LS-DYNA-使用手册-manual-V3-R13版本 在设置控制卡片和关键词等方面给予参考
apple mac 开发android-sdk_r13-mac_x86.zip
android-ndk-r13-darwin-x86_64.zip android ndk r13 for mac 最新的mac版本NDK
linux 64位 android-sdk_r13-linux_x86