java中的并发和并行有区别吗?
我一直在Google做一些研究,并且不能完全理解Java中并发和并行程序之间的差异(如果有的话)。 我所看到的一些信息表明两者之间没有区别。 这是这种情况吗?
这取决于谁在定义它。 如果创建Go编程语言的人员将代码分解为可以并行处理的代码,则调用代码Concurrent,而并行意味着这些代码段实际上正在同时运行。
由于这些都是编程原则,编程语言对它们的定义没有任何影响。 但是,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());
上面的代码是以并发的方式编写的:没有一个给定的代码需要一次过滤一个coolItem,或者一次只能调用一个项目的getId()
,或者甚至只能在一个项目上调用getId()
的列表需要在最后的项目之前被过滤或映射。 根据从getItems()
返回的Iterable
,给定的操作可能并行运行,也可能不运行,但是您编写的代码是并发的。
也感兴趣:
我想这取决于你的定义,但我的理解大致如下:
据我所知,这两个术语都不是特定于Java的,或者是任何Java特定的细微差别。
并行化 (或并行或并行计算)是一种计算形式,其中许多计算是同时进行的。 实质上,如果一个CPU密集型问题可以分成较小的独立任务,那么这些任务可以分配给不同的处理器
并发性更多的是多任务执行许多操作,但没有必要的CPU密集型问题。
链接地址: http://www.djcxy.com/p/13921.html上一篇: Is there a difference between concurrency and parallelism in java?