【发布时间】:2011-11-14 17:23:02
【问题描述】:
最近我正试图深入并发编程的世界。一开始我认为多核处理器的唯一原因是提高程序的性能。但现在我不再那么确定了......
考虑到用大多数语言编写多线程程序很困难,许多人倾向于推荐像 Erlang 或 Clojure 这样特别设计的语言作为并发计算的首选语言。 当然,Erlang 让编写并发程序变得容易得多,但值得吗?
我查看了一些关于枪战的 Erlang 程序(是的,我知道 microbenchmark 并没有说太多......)并且很惊讶许多单核 C 程序甚至优于四核 Erlang 程序。
所以我的问题是,Erlang、Clojure 等语言的优势是什么? 当 C/Java 中的单核程序更快时,我为什么要使用一种可以轻松编写多核程序的语言?
(我忘了说,这些问题只和多核机器有关,分布式计算是不一样的,我可以在这里看到Erlangs的优势)
【问题讨论】:
-
两个值得一看的视频:infoq.com/presentations/Value-Identity-State-Rich-Hickey 和 infoq.com/presentations/An-Introduction-to-Clojure-Time-Model。本来打算作为更长答案的一部分发布,但有人在我写它的过程中关闭了这个问题(干杯,伙计们......)
-
并发通常只会在更大更复杂的项目中成为问题。线程锁定问题很容易导致程序变慢,或完全停止正常工作。此外,多线程不适用于所有领域的速度提升。这或许可以解释 C 在微基准测试中的优势。
-
@Moe - Erlang FAQ 提供了非常合理的答案 - 请参阅“1.3 Erlang 特别适合什么样的应用程序?” - erlang.org/faq/introduction.html#id50265 - 和 - “1.4 Erlang 不是特别适合解决什么样的问题?” erlang.org/faq/introduction.html#id49866
-
感谢您的回答,我认为它必须与多核以及为它编写代码的复杂性做一些事情
-
当 Erlang 在实际应用中的表现优于 C++:slideshare.net/Arbow/… 你说得对,微基准测试也有缺陷 ;-)
标签: performance concurrency clojure erlang