小编use*_*020的帖子

在Erlang OTP 18上实现并发/可扩展性的最佳时钟或数字生成器功能?

目前正在将erlang应用程序从版本17转换为18.可伸缩性和性能是设计中的主要指令.该程序需要一种方法来区分和排序新输入,或者使用许多独特的单调递增数字(连续的数据流)或其他一些机制.当前版本(17)没有使用now(),因为它是一个可伸缩性瓶颈(全局锁定),所以它是通过读取时钟和做其他事情来为进入的数据生成标记.我是试图找出在18年做到这一点的最好方法,并从我运行的测试中得到一些有趣的结果.

我期望erlang:unique_integer([monotonic])得到不好的结果,因为我希望它有像now()这样的全局锁.假设可以并行读取时钟,我期望其中一个时钟功能具有最佳结果.相反,erlang:unique_integer([monotonic])从我基准测试的所有函数中获得最佳结果,并且时钟函数更糟糕.

有人可以解释结果,告诉我哪些erlang函数应该给出最好的结果,以及哪些东西(时钟,数字生成器等)是否全局锁定在18?此外,如果您发现我的测试方法存在任何问题,请务必指出它们.

测试平台/方法

windows 7 64 bit
erlang otp 18 (x64)
2 intel cores (celeron 1.8GHz)
2 erlang processes spawned to run each test function concurrently 500000 times
    for a total of 1000000 times, timed with timer:tc
each test run 10 times in succession and all results recorded
Run Code Online (Sandbox Code Playgroud)

BASELINE TEST,SEQENTIAL

erlang:unique_integer([monotonic])
47000-94000
Run Code Online (Sandbox Code Playgroud)

平行时代

erlang:unique_integer([monotonic])
~94000

ets:update_counter
450000-480000

erlang:monotonic_time
202000-218000

erlang:system_time
218000-234000

os:system_time
124000-141000

calendar:universal_time
453000-530000
Run Code Online (Sandbox Code Playgroud)

concurrency erlang performance time benchmarking

5
推荐指数
1
解决办法
356
查看次数

Emacs:Rebind数字(Beast VI VI VI的编辑)

刚从vi来到Emacs.

我想将键盘顶部的所有数字重新绑定到它们的移位对应物(即1个映射到!,2个映射到@等),同时将数字键盘数字保持为简单的数字.

我重新编写数字就好了,键盘顶部的数字正确映射到符号; 但是,这也将键盘数字映射到符号.作为回应,我试图将键盘数字重新重新映射回数字,但这是不成功的 - 它们仍然是符号.

当我使用vi时,这很容易实现,但我更愿意继续使用Emacs.有人有解决方案吗?

示例.emacs:

(global-set-key "1" "!")
; etc...

(global-set-key [kp-1] "1")
; etc...
Run Code Online (Sandbox Code Playgroud)

emacs keyboard-shortcuts

3
推荐指数
1
解决办法
126
查看次数

如何用变量调用Erlang函数?

4> abs(1).
1
5> X = abs.
abs
6> X(1).
** exception error: bad function abs
7> erlang:X(1).
1
8>
Run Code Online (Sandbox Code Playgroud)

当我用变量调用函数时,是否有任何特殊原因需要使用模块名称?这对我来说不起作用,因为,有一件事,它只是太多的句法垃圾,让我的眼睛流血.另一方面,我计划从列表中调用函数,例如(在我的头顶):

[X(1) || X <- [abs, f1, f2, f3...]].
Run Code Online (Sandbox Code Playgroud)

试图在这里使用各种模块名称会使冗长度达到顶峰,而我所做的全部工作就是减少冗长.

编辑:看这里:http://www.erlangpatterns.org/chain.html这家伙已经取得了一些管道功能.他按照我想要的方式调用函数,但是当我尝试使用它时,他的代码不起作用.但据我所知,这个人是一位经验丰富的Erlang程序员 - 我看到他在会议上发表了一些主题演讲或其他内容(我在网上看到了).

这种东西过去是否有用但不再适用?当然有一种方法可以做我想做的事 - 调用这些函数而不需要冗长和样板.

编辑:如果我正确阅读文档,似乎暗示我的顶部示例应该工作(第8.6节)http://erlang.org/doc/reference_manual/expressions.html

erlang

3
推荐指数
2
解决办法
447
查看次数

>>运算符 - Haskell中的穷人循环?

我不知道Haskell,我只想玩它来学习它.我试图理解io,monads等,并在解释器(GHCi,版本7.10.2,WinGHCI)中写了这个:

Prelude> [1,1] >> "ok"
"okok"
Prelude> [1,1,1] >> "ok"
"okokok"
Prelude> [1..10] >> "ok"
"okokokokokokokokokok"
Prelude> [1] >> "ok" >> [1] >> "ok"
"okok"
Prelude> [1,2] >> "ok" >> [1,2] >> "ok"
"okokokokokokokok"
Prelude> [1..10] >> [1..10]
[1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)

小心解释一下?为什么列表中的元素数量会影响写入"ok"的次数(或者在最后一种情况下,是否写入数组的次数)?>>运算符不应该这样做,是吗?

monads haskell list

2
推荐指数
1
解决办法
117
查看次数