8. ERTS 是个典型的网络服务器框架
? IO 处理
o kernel poll 如 epoll kqueue
? 定时器处理
o timewheel
? 逻辑处理处理
o process
? coroutine
? fiber
o smp
9. 强大的 PORT
? 仿照 Unix 的哲学 : 一切都是文件
? 管道通讯类似 CGI
? 支持可执行文件和动态库
o fd_driver_entry vanilla_driver_entry spawn_driver_entry
? kernel poll 支持大量的句柄
o 高度优化的 kpoll
? {lazy_updates,true},
{pending_updates,0},
{batch_updates,false},
{concurrent_updates,true},
10. 定时器
? 支持 time jump detection and correction
? Erlang 使用 timer 有 3 种方式:
o 语法层面的 receive ... after ...
o BIF: erlang:send_after(Time, Dest, Msg)
erlang:start_timer(Time, Dest, Msg)
o driver 层面的。
?? int driver_set_timer(ErlDrvPort port, unsigned long time);
12. 多处理器利用技术
? 线程
o 调度器
o 异步线程
o driver 发起的线程
? 精巧的锁
? process_lock
? 快速的 mutex
? 进程
o PORT 管道通讯
13. 虚拟机部分
? 基于 register
? JIT
o Hipe native 代码执行 效率高好多
o 语言速度评测中表现不俗
? opcode
o R12B 大概 200 条 goto 和 case 优化
o arithmetic, comparsions and boolean logic; manipulating
strings, tuples and lists; stack and heap allocation and
freeing; type tests for Erlang primitives (numbers, lists,
process IDs, references, and so on); jumps, structured
exception handling, and calls and returns; sending messages
and reading from the process' mailbox; waiting and timeouts
14. 系统调度
? 处理 timer 超时
? 处理子进程退出的情况
? 处理 port_task 事件,也就是 port 的 IO 事件
o port_task 独立调度 有自己的调度队列
? 如果没有活跃的进程 就 sys_schdule 阻塞在底层的 IO
中。
? check_io
? 根据 process 的优先级选出一个进程来调度。
o PRIORITY_MAX
o PRIORITY_HIGH
o PRIORITY_NORMAL
o PRIORITY_LOW
o PRIORITY_LEVELS
15. 数据结构
? 用地址来区分数据类型
? pid <X, Y, Z>
? atom
o index 表示
o cache 传送的是 index
? binary bitstring
o 非常高效 静态分析 opcode 执行
o 非线性处理
? list
o 单链表 表头加入
? tuple
o 相当于数组
22. BIF trap 机制
? distribution trap functions
o dsend2_trap
o dsend3_trap
o dsend_nosuspend_trap
o dlink_trap
o dunlink_trap
o dmonitor_node_trap
o dgroup_leader_trap dexit_trap
o dmonitor_p_trap
if the emulator wants to perform a distributed commandand%% a
connection is not established to the actual node the following %%
functions is called in order to set up the connection and then %%
reactivate the command.
23. 透明分布
? 需要 net_kernel 的协助
? group_leader 的设计和用途
? 可替换的传输介质
o inet_tcp_dist
o inet_ssl_dist
? dist trap 透明的进行握手动作
o connect and handshake
? 名称登记和维护
o local
o global
? 维护网络全联通
o net tick
o nodeup nodedown
o erlsnoop 查看交互