我一直在谷歌进行一些研究,但无法完全理解 java 中并发程序和并行程序之间的差异(如果有的话)。我查看过的一些信息表明两者之间没有区别。是这样的吗??
这取决于谁来定义它。 Go 编程语言的创造者并发调用代码 http://rspace.googlecode.com/hg/slide/concur.html如果它被分解成碎片could被并行处理,而并行意味着这些部分实际上是同时运行的。
由于这些是编程原则,因此编程语言与它们的定义方式无关。然而,Java 8 将具有更多功能来实现并发和并行性,而不会过多地扰乱您的代码。例如,这样的代码:
List<Integer> coolItemIds = new List<Integer>();
for(Item item : getItems())
{
if(item.isCool())
{
int itemId = item.getId();
coolItemIds.add(item);
}
}
...这是非并发和非并行的,可以这样写(我的语法可能是错误的,但希望你明白):
Iterable<Item> items = getItems();
Iterable<Item> coolItems = items.filter(item -> item.isCool());
Iterable<Integer> coolItemIds = coolItems.map(item -> item.getId());
上面的代码写在一个同时方式:给定的代码都不需要一次过滤一个 CoolItems,或者您只能调用getId()
一次处理一个项目,甚至需要在列表开头的项目之前过滤或映射列表末尾的项目。取决于什么类型Iterable
返回自getItems()
,给定的操作可能会也可能不会运行在平行下,但是你写的代码是同时.
还感兴趣:
-
并发不是并行 http://vimeo.com/49718712(演示视频)
-
并发不是并行吗? https://stackoverflow.com/questions/11700953/concurrency-is-not-parallelism(StackOverflow 上的讨论
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)