- 浏览: 982393 次
- 性别:
- 来自: 广州
最新评论
-
qingchuwudi:
有用,非常感谢!
erlang进程的优先级 -
zfjdiamond:
你好 这条命令 在那里输入??
你们有yum 我有LuaRocks -
simsunny22:
这个是在linux下运行的吧,在window下怎么运行escr ...
escript的高级特性 -
mozhenghua:
http://www.erlang.org/doc/apps/ ...
mnesia 分布协调的几个细节 -
fxltsbl:
A new record of 108000 HTTP req ...
Haproxy 1.4-dev2: barrier of 100k HTTP req/s crossed
文章列表
sys_max_files在erlang beam里面2处地方消耗内存:
1.
static struct driver_data {
int port_num, ofd, packet_bytes;
ErtsSysReportExit *report_exit;
int pid;
int alive;
int status;
} *driver_data; /* indexed by fd */
7 WORDS
driver_data = (struct driver_data *)erts_alloc(ERTS_ALC_T_DRV_TAB, ...
/* process priorities */
#define PRIORITY_MAX 0
#define PRIORITY_HIGH 1
#define PRIORITY_NORMAL 2
#define PRIORITY_LOW 3
#define NPRIORITY_LEVELS 4
process_flag(priority, Level)
This sets the process priority. Level is an atom. There are currently four priori ...
erlang的调度有2种: 1. 进程调度 2. IO调度。网络程序的事件来源基本上只有2种:IO和定时器。IO事件有可能是大量的, 不可预期的,所以在设计上要考虑和进程调度平衡。erlang的
erl_port_task就是为这个目标设计的。
poll检查到io时间的时候,会回调iread和oready函数。这2个会把这个队列加到porttask的调度队列去。
static ERTS_INLINE void
iready(Eterm id, ErtsDrvEventState *state)
{
if (erts_port_task_schedule(id,
&st ...
对于任何网络程序来讲,定时器管理都是重头戏。erlang更是依赖于定时器。基础的timer主要是由time.c erl_time_sup.c实现。timer是基于time wheel的实现,支持time jump detection and correction。 上层的erl_bif_timer.c io.c中实现。
erl +c
Disable c ...
[root@haserver ~]# erl -smp +K true
Erlang (BEAM) emulator version 5.6.5 [source] [smp:2] [async-threads:0] [hipe] [kernel-poll:true]
Eshell V5.6.5 (abort with ^G)
1> erlang:system_info(check_io).
[{name,erts_poll},
{primary,epoll},
{fallback,poll},
{kernel_poll,epoll},
{memory_size,9064},
...
/* INTERNAL use only */
struct erl_drv_entry async_driver_entry;
erlang beam里面有个async_driver设计的比较有意思。 在多处理器beam里面,线程间需要通讯。常规的情况下用condition再有个队列之类的辅助。 但是这个设计不能充分利用io的优势,而且使用起来很麻烦。async_driver就是设计给这个用途的。 它建立一对pipe,把它登记到poll去,生产者要发送消息的时候,就往pipe写。 poll机制就会通知消费者,消费者根据读出的东西进行动作. ACE框架也大量用这种模式,看来大同世界一般同。但是 ...
erlang能够利用多核心的优势不仅体现在多线程的smp调度器,更在port上面上体现。通过执行外部程序,接管它的输入输出, 实现了安全性和充分利用cpu计算资源。
erlang的io设计体现了unix一切以文件为中心的思想。在port设计上也是.这3个驱动程序都是把相关的东西转化成文件句柄,登记到poll上面,利用强大的IO poll来实现上层语义的整合。
ErlDrvEntry spawn_driver_entry;
{spawn, Command}
Starts an external program. Command is the name of the external ...
Erlang系统在我看来有3个特性 1. 分布 2. 多核心支持 3. fp。 这这3个特性中分布我认为是erlang最强大的,从第一个版本就支持到现在,相对非常成熟,而多核心支持是这几年才加进去的。
erlang的分布系统做到了2点 1.节点的位置无关 ...
The SMP support has mainly been designed and implemented by Rickard Green,
Tony Rogvall (mostly ets), Mikael Pettersson (mostly optimized synchronization
primitives, and timer thread), and Patrik Nyblom (mostly dynamic drivers, and
Windows port). Also Bj<F6>rn Gustavsson and Raimo Niskanen have ...
libev http://software.schmorp.de/pkg/libev.html
A full-featured and high-performance (see benchmark) event loop that is loosely modelled after libevent, but without its limitations and bugs. It is used, among others, in the GNU Virtual Private Ethernet and rxvt-unicode packages, and in the Deliantra ...
今天发现lighty2.0的 url, config, httprequest 全部用ragel。 ragel http://www.complang.org/ragel/
这个东西我去年的时候非常兴趣. 用它写的atoi函数比标准库的快了好几倍,有点不可思议,主要是它产生的代码大量根据编译器的特点做了大量的优化。 从此以后协议分析告别手工时代,步入机械化生产。
类似的工具有lex/yacc, boost spirit, lua lpeg, lemon, bison. ragel最快最简单。推荐大家使用。
erlang能够利用多核心cpu的基础设施有2个 1. 进程调度器 2. async 线程池。
其中 async 线程池主要设计用来 能够在driver里面异步的执行费时操作, 因为driver是在调度器里面调用的 不过费时操作的话 会block掉整个调度器 而且调度器 ...
突然想起了 解释ISA总线是 IS A DISK的家伙了, 想起来在实验室的日日夜夜。日子真的过的很快。
- 2008-12-02 16:42
- 浏览 1219
- 评论(3)
Dynamic Programming
中文譯作「動態規劃」,英文常常縮寫成 DP 。在數學領域中, programming 是指「最佳化( optimization )」的意思,例如求極大值、求極小值。 dynamic 是指「動態」的意思。顧名思義, Dynamic Programming 是一個以動態的方式來進行最佳化的方法。
老朱说 《《代码之美》》里面翻译做 动态编程, 不知道真假?
看来翻译点东西也不容易。
The async thread pool has nothing with SMP todo. The asynch threads are only
used by the file driver and by user written drivers that specifically uses the thread pool. The file driver uses this to avoid locking of the whole Erlang VM for a longertime period in case of a lengthy file operation. The a ...
- 2008-11-29 11:55
- 浏览 1384
- 评论(0)