erl0009 - erlang 读取时间瓶颈解决办法
读取时间erlang提供有两种方式:
1、erlang:now();
2、os:timestamp();
以上两种方式由于erlang系统需要保证读取精度,当并发读取的时候会引起加锁。系统频繁读取时间将会带来性能上的一定开销;
为避免这种不必要的开销,可以采用一种折中的办法------“低精度时间管理”。具体办法是,自己维护一个模块来管理时间,10-1000毫秒读取一次系统时间存于gen_server的状态、进程字典或者ets中。其他地方需要时间的,全都并发读取时间。这里我个人认为存入ets比较好。因为如果存入gen_server状态或进程字典,那么并发读取就需要走消息流。开销肯定会比并发读取ets大,ets数据共享,其他进程可以直接并发读取。
参考来源:http://blog.yufeng.info/archives/2977