Moe*_*Moe 6 concurrency erlang performance clojure
最近我正试图深入到并发编程的世界.在一开始我认为多核处理器的唯一原因是程序性能的提高.但现在我不再那么肯定了......
考虑到在大多数语言中编写多线程程序是难以理解的事实,许多人倾向于推荐特别设计的语言,如Erlang或Clojure作为并发计算的首选语言.当然,Erlang使编写并发程序变得容易得多,但值得吗?
我在枪战中查找了一些Erlang程序(是的,我知道microbenchmark并没有说太多......)并且很惊讶许多单核C程序甚至超过了四核Erlang程序.
所以我的问题是,Erlang,Clojure等语言有哪些优势?为什么我应该使用一种语言,这使得编写多核程序变得容易,当C/Java中的单核程序更快?
(我忘了提一下,这些问题只与多核机器有关,分布式计算有所不同,我可以在这里看到Erlangs的优势)
当大多数好的答案开始时,它取决于你想要做什么,在这种情况下,它取决于你在(硬件)上尝试做什么.
目前,有一些不错的机器可用32 + cpus.要利用所有这些cpus,需要:
通常1比2更容易做.
如果你看一下"硬件的未来",似乎有一种趋势是更多的cpus而不是更快的.所以说,ParaCCC(虚构语言)比C慢10倍,但你有一台512 cpus的机器,ParaCCC(对于我们的问题)可以使用.理论上,ParaCCC程序的运行速度比C程序快51倍.没有重写.Plus C通常不知道它的上市时间,因为这是这些新语言的另一种吹嘘.
此外,您可能没有考虑到大多数执行任何I/O的程序最终都会出现多线程,因为您倾向于使用不同的线程进行I/O而不是处理,并且您不希望单个慢速客户端放慢速度你失败了(显然C可以做到这一点,但线程模型通常看起来更好).
关于Erlang,我在这里问了一个相关的问题:在Erlang比单线程Java更快之前需要多少CPU,其答案在这些方面有更多的细节和参数......