并发是指多个任务,这些任务在重叠的时间段内以无特定顺序启动,运行和完成。并行是指多个任务或唯一任务的多个部分实际上在同一时间(例如在多核处理器上)运行。请记住,并发和并行性不是一回事。
让我们更详细地了解当我说“ 并发与并行”时的意思。
Concurrency
当我们谈论至少两个或更多任务时,并发本质上是适用的。当一个应用程序实际上可以同时执行两个任务时,我们将其称为并发应用程序。尽管这里的任务看起来像是同时运行的,但实际上它们可能不一样。它们利用操作系统的CPU时间分片功能,其中每个任务运行其任务的一部分,然后进入等待状态。当第一个任务处于等待状态时,CPU被分配给第二个任务以完成它的一部分任务。
因此,操作系统根据任务的优先级分配CPU和其他计算资源,例如内存;依次处理所有任务,并给他们完成任务的机会。对于最终用户,似乎所有任务都是并行运行的。这称为并发。
Parallelism
并行不需要两个任务存在。通过使用CPU的多核基础结构,通过为每个任务或子任务分配一个内核,它实际上可以同时运行部分任务或多个任务。
并行性本质上要求具有多个处理单元的硬件。在单核CPU中,您可能会获得并发性,但不能获得并行性。
Differences between concurrency vs. parallelism
现在让我们列出并发和并行之间的显着差异。
并发是两个任务可以在重叠的时间段内启动,运行和完成的时间。并行是指任务实际上在同一时间运行,例如。在多核处理器上。
并发是独立执行进程的组成,而并行性是同时执行(可能相关的)计算。
并发就是一次处理很多事情。并行是关于一次做很多事情。
一个应用程序可以是并发的,但不能是并行的,这意味着它可以同时处理多个任务,但是没有两个任务可以同时执行。
一个应用程序可以是并行的,但不能是并发的,这意味着它可以同时处理多核CPU中一个任务的多个子任务。
一个应用程序既不能是并行的,也不能是并发的,这意味着它一次顺序地处理所有任务。
一个应用程序可以是并行的,也可以是并发的,这意味着它可以同时在多核CPU中同时处理多个任务。
这就是关于并发与并行性的全部内容,这是Java多线程概念中非常重要的概念。
学习愉快!