【Erlang】ETS的并发性能调节选项

ETS在创建表时, 有 write_concurrencyread_concurrency 这两个选项, 可以用以优化ETS的并发性能.

write_concurrency 默认设置是 false, 当表进行写操作时, 整个表会被锁起来, 直到写完为止. 把这个值设置为 true, 可以优化并发写性能, 表中的不同项可以同时进行读写, 代价是会消耗一些内存, 并且会降低并发读的性能. 但是对于 order_set 类型的表, 目前的Erlang版本下是不受这个选项影响的.

阅读全文

【Erlang】gen_server terminate的坑

gen_server进程结束时, 会调用terminate函数, 但这并不是在任何情况下都成立的.

当gen_server进程主动关闭时, 也就是在回调函数 handle_xxx 中返回 {stop...} 的时候, terminate 是必然被调用的.

阅读全文

OTP监控树笔记

这是Learn You Some Erlang中的Building an Applications with Otp的笔记.

在文中, OTP被戏称为Onion Theory Platform, 监控树像洋葱一样, 一层又一层.

OTP的哲学是工人-监工, 工作进程做错事就让它死掉, 监督进程再开启新的工作进程来干活. 这样做有个让人觉得很麻烦的问题: 工作进程死掉了, 它的状态怎么办? 文中进行了讨论. 状态可以分成三类:

阅读全文

Apache启动时报443端口被占用的处理方法

下午在自己机上装了Apache2.4, 启动时说443端口被占了:

(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。  : AH00072: mak
e_sock: could not bind to address [::]:443
(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。  : AH00072: mak
e_sock: could not bind to address 0.0.0.0:443
AH00451: no listening sockets available, shutting down

杀掉占用443的那个程序当然可以, 另一种方法是把443改成另外的不常用端口: 如这篇文章介绍的, 还有一种方法是直接关闭Apache的SSL模块, 反正在我自己的机上用不着.

阅读全文

【Erl代码片段】cowboy的一处大小写处理代码

在cowboy的库cowlib中的cow_inline.hrl文件看到一堆很长的宏:

-define(INLINE_LOWERCASE(Function, Rest, Acc),
    $A -> Function(Rest, << Acc/binary, $a >>);
    $B -> Function(Rest, << Acc/binary, $b >>);
    $C -> Function(Rest, << Acc/binary, $c >>);
    $D -> Function(Rest, << Acc/binary, $d >>);
    $E -> Function(Rest, << Acc/binary, $e >>);
    $F -> Function(Rest, << Acc/binary, $f >>);
    $G -> Function(Rest, << Acc/binary, $g >>);
    $H -> Function(Rest, << Acc/binary, $h >>);
    $I -> Function(Rest, << Acc/binary, $i >>);
    $J -> Function(Rest, << Acc/binary, $j >>);
    $K -> Function(Rest, << Acc/binary, $k >>);
    $L -> Function(Rest, << Acc/binary, $l >>);
    $M -> Function(Rest, << Acc/binary, $m >>);
    $N -> Function(Rest, << Acc/binary, $n >>);
    $O -> Function(Rest, << Acc/binary, $o >>);
    $P -> Function(Rest, << Acc/binary, $p >>);
    $Q -> Function(Rest, << Acc/binary, $q >>);
    $R -> Function(Rest, << Acc/binary, $r >>);
    $S -> Function(Rest, << Acc/binary, $s >>);
    $T -> Function(Rest, << Acc/binary, $t >>);
    $U -> Function(Rest, << Acc/binary, $u >>);
    $V -> Function(Rest, << Acc/binary, $v >>);
    $W -> Function(Rest, << Acc/binary, $w >>);
    $X -> Function(Rest, << Acc/binary, $x >>);
    $Y -> Function(Rest, << Acc/binary, $y >>);
    $Z -> Function(Rest, << Acc/binary, $z >>);
    C -> Function(Rest, << Acc/binary, C >>)
).

底下还有2参数,3参数…10参数的版本.

阅读全文

(1 - 8)
Enter Press Enter to jump