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 ,给定的操作可能并行运行,也可能不运行,但是您编写的代码是并发的。

也感兴趣:

  • 并发不是并行(演示视频)
  • 并发不是并行性? (讨论StackOverflow

  • 我想这取决于你的定义,但我的理解大致如下:

  • 并发性是指以某种未指定的顺序发生的事情。 多任务 - 通过时间分割交错指令执行多个程序 - 是考虑并发感的好方法。
  • 并行性 (或“真正的”并行性)是指在同一时间发生的事情。 这需要硬件支持(协处理器,多核处理器,联网机器等)。 所有并行是并发的,但并非所有并行都是并行的。
  • 据我所知,这两个术语都不是特定于Java的,或者是任何Java特定的细微差别。


    并行化 (或并行或并行计算)是一种计算形式,其中许多计算是同时进行的。 实质上,如果一个CPU密集型问题可以分成较小的独立任务,那么这些任务可以分配给不同的处理器

    并发性更多的是多任务执行许多操作,但没有必要的CPU密集型问题。

    链接地址: http://www.djcxy.com/p/13921.html

    上一篇: Is there a difference between concurrency and parallelism in java?

    下一篇: What is "callback hell" and how and why RX solves it?