首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多核/并发编程与.NET/Java

多核/并发编程与.NET/Java
EN

Stack Overflow用户
提问于 2011-08-16 22:26:20
回答 4查看 510关注 0票数 4

我经常听说其他语言更适合于多核/并发编程,如Clojure、Scala、Erlang等,但我有点困惑,为什么我需要担心多核,Java/.NET VM不应该自动处理吗?如果不是,背后的原因是什么?

是不是因为提到的这些语言是函数式的,并且比非函数式语言有一些固有的优势?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-16 22:30:00

你需要注意的原因是处理器通常不会变得更快。取而代之的是,它们中的更多正在以附加内核的形式添加到计算机中。为了让程序能够利用额外的处理器,一般来说,它必须使用多个线程来实现。Java和大多数其他语言不会自动在程序中使用更多的线程。这是您需要手动执行的操作。

有些人喜欢像Scala、Erlang和F#这样的函数式语言,而不是多线程编程中的非函数式语言。函数式语言在默认情况下至少是浅层不变的,因此在理论上更容易在多线程的情况下使用。

这里有一篇关于这个主题的很好的文章。

  • The Free Lunch is Over
票数 1
EN

Stack Overflow用户

发布于 2011-08-16 22:31:04

函数式语言有一个固有的优势,即大多数函数/方法调用都是幂等的,而且它们通常会大量使用“不变性”。

在使用不可变的“东西”时进行并发操作要比使用可变的“东西”容易得多。

但不管怎样:你需要担心并发性,因为我们将使用越来越多的核心和,而不是,越来越快的时钟。Java / C#不能自动地使你的程序并发:你仍然需要自己做艰苦的工作。

票数 1
EN

Stack Overflow用户

发布于 2011-08-16 22:31:51

在普通命令式语言的情况下,默认情况下不会从平台获得太多帮助。没有一个编译器足够聪明,可以并行化正常的命令式代码。

但是,有各种帮助库可以在不同的平台上为您提供帮助。例如,.NET中的任务并行库允许您这样做,例如:

代码语言:javascript
运行
复制
Parallel.ForEach(files, file => 
{
   Process(file);
});

纯函数式语言总是具有最小共享状态的好处,这意味着这样的代码更容易并行化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7079774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档