性能 – 从并发编程(语言)中获益?

最近我正试图深入到并发编程的世界.在一开始我认为多核处理器的唯一原因是程序性能的提高.但现在我不再那么肯定了……

考虑到在大多数语言中编写多线程程序是难以理解的事实,许多人倾向于推荐特别设计的语言,如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,我在这里问了一个相关的问题:How many CPUs are needed before Erlang is faster than single-threaded Java其答案中有更多的细节和参数……

本站公众号
   欢迎关注本站公众号,获取更多程序园信息
开发小院