并发性,并行性和asynchronous方法之间有什么区别?
并发性是在单独的线程上并行运行两个任务。 但是,asynchronous方法并行运行,但在同一个线程上运行。 这是如何实现的? 另外,并行呢?
这三个概念有什么区别?
并行和并行实际上是与你正确猜测的原理相同的,两者都与同时执行的任务有关,尽pipe我认为并行任务应该是真正的多任务,“同时”执行,而并行可能意味着任务共享执行线程仍然看起来是在并行执行。
asynchronous方法与前两个概念不直接相关,asynchronous用于表示并发或并行任务的印象,但有效地,asynchronous方法调用通常用于需要远离当前应用程序工作的进程,不想等待,阻止我们的应用程序等待响应。
例如,从数据库获取数据可能需要一些时间,但我们不希望阻止我们的UI等待数据。 asynchronous调用采用callback引用,并在远程系统发出请求后立即返回执行。 您的用户界面可以继续响应用户,而远程系统执行任何所需的处理,一旦它将数据返回到您的callback方法,那么该方法可以根据需要更新UI(或更新该更新)。
从用户angular度来看,它似乎像多任务,但它可能不是。
编辑
可能值得补充的是,在许多实现中,asynchronous方法调用将导致线程被分解,但这不是必需的,它实际上取决于正在执行的操作以及如何将响应通知给系统。
简而言之,
并发意味着在重叠的时间段内开始,运行和完成的多个任务,没有特定的顺序。 并行是当多个任务或者独特任务的多个部分同时运行时,例如在多核处理器上。
请记住并发和并行是不一样的。
并发与并行之间的区别
现在让我们列举并发与并行之间的显着区别。
并发性是指两个任务可以在重叠的时间段内启动,运行并完成。 并行是当任务在同一时间运行,例如。 在一个多核处理器上。
并发性是独立执行的进程的组成,而并行是同时执行(可能相关)的计算。
并发是一次处理很多事情。 并行是一次做很多事情。
一个应用程序可以是并发的,但不是并行的,这意味着它可以同时处理多个任务,但是没有两个任务在同一时刻正在执行。
应用程序可以是并行的,但不是并发的,这意味着它可以同时处理多核CPU中的任务的多个子任务。
一个应用程序既不是并行的,也不是并发的,这意味着它按顺序逐个处理所有任务。
一个应用程序可以是并行的,也可以是并发的,这意味着它可以同时在多核CPU中同时处理多个任务。
并发
当我们谈论最less两个或更多的任务时,并发性本质上是适用的。 当应用程序能够同时执行两个任务时,我们称之为并发应用程序。 虽然这里的任务运行看起来像是同时进行,但实际上他们可能不会。 他们利用操作系统的CPU时间片function,每个任务运行一部分任务,然后进入等待状态。 当第一个任务处于等待状态时,CPU被分配给第二个任务来完成它的一部分任务。
基于任务优先级的操作系统,从而分配CPU和其他计算资源,例如内存; 轮到所有的任务,给他们机会完成。 对于最终用户来说,似乎所有任务都并行运行。 这被称为并发。
排比
并行性不需要存在两个任务。 它实际上是通过为每个任务或子任务分配一个内核来物理地运行部分任务或多个任务,同时使用CPU的多核基础结构。
并行性本质上需要具有多个处理单元的硬件。 在单核CPU中,你可能会得到并发但不是并行。
asynchronous方法
这与并发和并行性无关,asynchronous用于表示并发或并行任务的印象,但实际上,asynchronous方法调用通常用于需要远离当前应用程序的进程,而且我们不希望等待并阻止我们的应用程序等待响应。
由于asynchronous并不是并行或并发的反义词,所以每个人都无法将asynchronous与并行或并发关联起来。 它是同步的反义词。 这只是表明,如果在这种情况下,线程,将与其他东西同步,在这种情况下,另一个线程。
以前的答案是够好的。 但是我会试着用简单的术语来解释它们。 asynchronous:任务可能开始也可能不开始同时执行(即它们之间没有同步)。
并行:任务在同一时间开始执行。
并行:任务执行可能同时也可能不同时开始,但独立工作。
在以上所有场景中,任务可能会在未来相互阻塞。
请随时改善或更正答案。
并发VS并行:并发在一个时间点上只能完成一项任务。 例如:单个CPU处理器的并行性在一点上我们可以做多个任务。 例如:双核或多核处理器
并发并发意味着一个应用程序正在同时(同时)在多个任务上取得进展。 那么,如果计算机只有一个CPU,则应用程序可能无法在同一时间完成多个任务,但在应用程序内部一次处理多个任务。 在下一个任务开始之前,它并没有完成一项任务。
并行性并行性意味着应用程序将其任务分解为可以并行处理的更小的子任务,例如同时在多个CPU上处理。
并发性与并行性详细信息正如您所看到的,并发性与应用程序处理多个任务的方式有关。 应用程序可以同时处理一个任务(按顺序)或同时处理多个任务(同时)。
另一方面,并行性与应用程序如何处理每个单独的任务有关。 应用程序可以从头到尾地串行处理任务,或者将任务分成可以并行完成的子任务。
正如你所看到的,一个应用程序可以是并发的,但不是并行的。 这意味着它可以同时处理多个任务,但这些任务不会被分解为子任务。
应用程序也可以是并行的,但不是并行的。 这意味着应用程序一次只能处理一个任务,而这个任务被分解成可以并行处理的子任务。
另外,应用程序既不能并行也不能并行。 这意味着它一次只能处理一个任务,并且任务不会被分解为并行执行的子任务。
最后,应用程序也可以是并行的,也可以是并行的,因为它们既可以同时在多个任务上工作,也可以将每个任务分解为子任务以便并行执行。 但是,在这种情况下,并发性和并行性的一些好处可能会丢失,因为计算机中的CPU已经单独保持合并繁忙的并发或并行。 把它结合起来可能只会带来很小的性能提升甚至性能损失。 确保在盲目采用并行模型之前进行分析和测量。 从http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html