并发性和并行性是计算中非常关键的技术,操作系统(OS)使用它们来执行多个进程。在下面的文章中,我们讨论了它们是什么,它们的相似之处和区别,以及可能存在的缺点。

随着计算机科学的增长,程序员、开发人员等希望进行处理的方式变得更加先进。然而,经常出现并混淆在一起的两个最常见术语是并发和并行。

尽管它们听起来相似且容易混淆,但它们的原理是不同的。引入这个概念的原因是技术精通者渴望扩展他们的处理器,并迅速运行多个进程。为了做到这一点,在中央处理单元(CPU)中创建了更多核心。结果,为了充分利用这些核心,需要应用并发和并行的概念。

这两个概念是现代计算中用于执行多个进程或程序的技术。从而提高系统性能和响应能力。要理解这两种操作系统处理技术,有一些核心关键词需要涉及。

其中包括多重处理、多线程、多核处理器、流水线以及分布式计算等。在本文中,我们将探讨这两种处理方法之间的相似之处,并根据某些参数对它们进行比较。但在此之前,让我们首先探索一下这些技术究竟是什么。


并发性和并行性概述

并发性

并发性是指多个任务在重叠的时间段内工作,而不一定同时执行它们。在并发处理中,任务进程在单核CPU上进行,从而允许系统无缝切换它们之间。这意味着例如,在一个系统中有4个任务被执行;所有这些任务都需要注意,但只有一个处理单元可用。在并发系统中,这些任务将同时进行处理,但彼此交错。

也就是说,如果任务1运行,则2会跟随其后,然后是3和4,并再次回到1. 它不必等待完成一个任务才开始另一个的处理。它们在彼此之间不断切换直到所有的任务完成其运行时间。

它们不是同时进行的, 但单个CPU可以通过多线程来执行数百个任务,并快速切换。创建并发系统时, 中断被构建以避免特定分配的任务占用太长时间CPU.

这也称为抢占式调度。因此, 需要重新调整CPU时间,因为两个任务不能同时运行。此外,并发旨在管理多个任务, 因此必须进行时间片分配. 这种技术通过使用多线程实现。

并行性

另一方面,涉及在同一时间点或同时执行多个任务或进程。在并行处理中,任务被分解为较小的子任务。与并发性不同的是,这种技术可以在多个核心上工作。这意味着任务独立且同时地在多个处理单元(如CPU核心)上执行。这种并行执行通常用于加快计算和性能。让我们实现之前的例子:

当任务1运行其进程时,任务2、3和4使用CPU的多核基础设施同时运行。这告诉你的是,并行系统的完成时间是相同的。任务一不会在任务2之前完成它的工作。它们以并行方式工作,确保整体项目完成得更快。该技术使用了多进程、多核、分布式甚至流水线。

你应该简单理解的是,有些先进计算机具有高达16个核心。最重要的是,你中央处理器(CPU)拥有几个核心就代表着可以同时进行几项操作。这就是所谓的并行性表示的含义。因此,处理器中核心数量非常关键,并且很重要,因为它定义了您进行并行操作所能做到哪些事情


并发性和并行之间的相似之处

尽管并发和并行具有不同的属性,但它们也有一些相似之处。让我们概述一下它们是什么。

处理多个任务:并发和并行都涉及多线程和多处理。管理多项任务是这两种技术的相似之处之一。单核运行并发,而并行则通过多核运行。然而,这里的重点不是他们的核心数量,而是任务。它们都可以运行和执行数百个以上的任务。反过来,这就是使它们相似的细线。

系统响应能力:并发性和并行性在响应方面有相似之处。尽管他们的目标不同,但他们都确保任务在时间上重叠并达到特定的速度。并发性关乎可用性,确保一切正常运行。并行性着眼于任务的速度和性能。这里的关联点是他们的程序执行速度很快,并且多任务处理速度更快。因此,无论是单核还是多核,都具有良好的系统响应。

可扩展性: 通常,在设计时考虑到并发性和并行性的系统可以轻松地进行扩展以处理许多任务。重要的是了解两者如何工作。随着处理核心数量的增加,系统可以同时处理更多的任务。此外,保持响应能力和性能。并发和并行可以轻松地相互补充,因为它们都可以在运行时执行多个任务。

调试:在涉及并发性和并行性时,该术语并不是一个游乐场。他们都能处理和解决复杂的问题。在并发系统中,任务会重叠,但如果不小心,一项任务就会盖过另一项任务。如果程序未设计有停止时间,则并行性也会出现此问题。因此,可能会发生内存泄漏和错误。

利用率:即使程序处于等待时间或多处理状态,也能获得最大利用率。并发和并行都确保了这个概念的合理性。这样一来,任务得到了很好的调整,计算可以有效地提高系统性能。


并发与并行的对比

并发性和并行性之间经常存在令人困惑的地方。看到两者的相似之处以及它们共享的细线后,在本文的这一部分中,我们将列出并解释两种处理技术中不同的一些主要不同参数。

多任务管理

首先,是管理多个任务的属性。尽管这两个过程有相似之处,但差异更大。并行性允许利用多个处理核心更快地完成任务。该核心与众不同,从而提高了整体系统性能。而并发可确保系统保持响应和利用率。多个任务得到有效处理,从而导致使用重叠或时间切片。

同步执行以提高速度

并发和并行的目标是不同的。并发的目标是使用以确保没有阻塞,从而在重叠的时间执行多个进程。并行性确保性能和速度。这进一步有助于使用多核处理器运行和执行多个进程。在这种情况下,多个处理器并行运行。并行性可以加速进程。您在这里感兴趣的是并发性与性能无关,尽管它在任务中切换得非常快。这两种处理技术的工作方式不同。虽然它们都可以执行数百个任务,但并发系统在不同的时间范围内执行任务。并行性在瞬间同时执行。

资源利用

众所周知,并发更多地关注于使用。尽管如此,并行性通过在多个处理器之间分配任务来优化可用资源的利用率。即使其他任务正在等待外部事件,并发性也会允许任务继续进行,从而确保资源得到有效利用。更重要的是,在并发系统中,调整时间至关重要。它有助于防止掩盖并发的主导任务。这种情况永远不会发生在并行系统中,因为一切都是同时的。

线程交错

这个概念在并发中很常见。在并发系统中,任务交错使得一个任务先于另一任务完成。为了更清楚起见,我们举个例子。例如,如果运行时有 A-Z 任务,则所有任务都会立即开始,但会在其中切换。这就是它如何保持快速处理的方式,比如几秒钟。有趣的是,任务 A 不得在任务 Z 开始之前完成。并行性使用多处理,这意味着它不会等待,所有程序都具有相同的运行时间并立即完成。

应用程序可以是并发的,但不能是并行的。这意味着可以有多个任务正在进行,但不能同时执行两个任务。并行性也是如此。程序可以是并行的,但不能是并发的。这意味着多个子任务可以同时进行。

不确定性输出

在确定并发性和并行性的输入和输出方面,差异是显而易见的。我们知道并行系统是同时工作的,所以这个概念可能不太清楚。不过,让我们在使用单核 CPU 的并发系统中看看。请记住,我们说过并发系统切换、使用时间切片,甚至在程序内交错。

这告诉你的是输出无法确定。以使用上面的 A-Z 实例为例;运行结束后任务内切换的第一个输出可能与第二个输出不同。这就是为什么并发系统不应该具有相同的输出。一项任务可以与另一项任务重叠,反之亦然。从而导致具体的输出无法确定。

解决复杂问题

调试通常是计算中的一个具有挑战性的因素,因此它并不是什么新鲜事。并发和并行系统也面临着这个问题。虽然这两种技术在这方面是相似的,但它们都具有复杂的调试。但从不同的角度来看,并发性的调试比并行性更复杂。并行性对于解决复杂的计算问题至关重要。而并发可确保用户界面在执行这些计算密集型任务时保持响应。并发性确保运行任何任务时不会出现阻塞。虽然并行性可以完成任务并确保有效的速度和性能是确定的。

异步和同步

异步简单地意味着某事不同时发生。也就是说,控制操作的时机以避免一个任务饿死另一个任务,并且防止死锁。同步是指系统在同一时间或瞬间执行程序或任务。无需调整处理时间。然而,并行操作系统是异步的,而并行操作系统则会同步和异步执行任务。

并行性通过同时执行特定的并发程序来处理异步任务。为了提高日常程序的性能水平,需要熟悉这些术语并了解其流程的工作原理。尽管并发性是不可或缺的,但并行性似乎是万能的。在设计并行程序环境时,如果您不知道在哪里调用其停止,则可能会出现错误和内存损坏。

中央处理器核心

中央处理单元核心是最初带来并发性和并行性的主要决定因素。众所周知,它要么是单个的,要么是多个的。有些系统甚至有多达 16 个核心。与使用单核 CPU 的并发不同,并行使用多核。主要区别在于,在并发系统中,每个任务都是相关的,因为它们都来自一个中央处理单元。他们必须等待并在自己内部进行切换。而在并行中,每个核心独立工作。

需要注意的是,核心数量决定了一次可以执行的任务数量。单核,即使正在运行多个程序,也一次只会执行一项任务。而多核CPU将进行多处理并在瞬间执行多个程序。这就是并发和并行系统的工作原理。

灵活性

从用例来看,并发比并行更灵活。由于并发系统通过在任务之间切换来工作,因此它提供了管理多个任务的灵活性。从而使系统能够适应不同的任务并知道哪一项比另一项更重要。并行性更多的是关于计算任务的性能。运行每个子任务时速度是确定的,但由于其运行时是同步的,因此适应动态工作环境可能具有挑战性。


网络抓取中的并发与并行

并发和并行是两个可以应用于网页抓取的概念,以提高其效率和速度。并发是指同时管理多个任务,即使它们实际上并未同时执行。它是通过 CPU 上进程的交错操作或上下文切换来实现的,从而产生并行的假象。并发更多的是关于程序的结构以及它如何同时处理多个任务

另一方面,P并行主义是指同时执行多个任务。在并行系统中,任务被分为更小的子任务,这些子任务通常在多个处理器或内核上同时或并行处理。这导致系统的吞吐量和计算速度的增加。并行性更多地涉及程序的执行以及程序如何通过同时执行多项操作来加速处理

在网页抓取中,并发和并行都可以用来加速该过程。可以使用 Python 中的 asyncio 等库来实现并发,它允许您同时管理多个任务,而无需实际同时执行它们可以使用库来实现并行性就像 Python 中的并发.futures 一样,它允许您跨多个 CPU 核心或线程同时执行多个任务 通过将并发和并行性应用于网页抓取,您可以可以显着提高网页抓取任务的效率和速度。


并发和并行的缺点

介绍了并发性和并行性的各种比较参数后,让我们看一下这些处理技术可能具有的缺点。


并发的缺点

在本节中,我们将了解创建并发系统的一些缺点

1.死锁和饥饿:如果设计不仔细,并发系统中可能出现的一个主要缺点是死锁和饥饿。现在,这意味着什么?当两个或多个任务无法进行且每个任务都需要等待时,就会出现死锁。任务A正在等待任务B启动任务。这就是为什么仔细调整时间以实现完美的切片在并发系统中至关重要。此外,就饥饿而言,如果没有适当的重叠,一个任务可能比其他任务具有多个运行时。

2.它是不确定的:任务内的并发系统交错和切换,有时这可能是一个挑战。当任务切换时,输出也会切换,因此,第一个程序运行时输出可能与第二个不同,依此类推。

3.同步的复杂性:管理并发任务通常需要同步,但这个概念在并发系统中实现起来很复杂。事实上,在尝试设置这些同步优势以防止任务内发生冲突时,可能会出现死锁等其他问题。

4。太多的应用程序或任务:运行太多的任务有时可能会给并发系统带来不利。这是因为它会降低性能,并且必须保护多个程序免受彼此的影响。

5。资源分配:如果没有很好地调整资源分配以实现轻松运行和切换,操作系统将很难管理时间。当这种情况发生时,即使是错误,定位和调试也会变得非常复杂。


并行的缺点

我们已经研究了一些可能阻碍工程师和程序员设计并发系统的缺点。现在,我们还将研究并行性的缺点。

1.内存损坏、泄漏和错误:设计并行系统需要仔细注意。您需要知道时间范围以及程序应停止的时间。如果所有必要的属性没有正确到位,则可能会发生错误。这些错误可能进一步导致整个内存损坏。

2.并行任务调试困难:由于并行性的同时执行属性,解决任务问题可能具有挑战性。因为大多数时候,它将任务划分为子任务,因此发现要调试的潜在问题可能很困难。

3.分解任务的复杂性:在并行性中,任务被分解为子任务。因此,必须进行仔细的分析和设计,因为分区可能具有挑战性。另外,如果这里出现错误,速度和性能都会降低。

4。设计成本昂贵:与并发系统相比,并行系统的设计成本效益不高。并行性需要特定的硬件,例如多核处理器和互连计算机。这种多核处理器并不适合随身携带,CPU 核心越多,价格就越高。使用并行处理会产生一定的开销。虽然这可能会增加其执行时间,但成本是额外的。

5。同步:在并行中,任务之间需要相互通信,并进行同步调用。这个过程通常很复杂,如果设计不当可能会出现问题,并且需要仔细且完美的设置才能运行,否则性能将会受到影响。

并发和并行还有更多缺点。然而,如果设计不当,这些是很容易破坏这些流程的主要因素。


常见问题解答

1. 并发系统能否在第一个任务完成运行之前启动新任务?

是的,并发系统可以在运行结束之前释放新资源。并发的思想是管理多个任务。数百个任务可以同时运行,但彼此交错。这意味着并发系统不是同时系统,即使它看起来像同步系统。许多人将并发和并行性混淆在一起,因为并发系统在几秒钟内处理多任务的速度有多快。但是没有一个并发系统可以同时执行两个任务。尽管它们都在运行,但其中一个任务先于另一个任务完成,但一项任务仍然可以在另一个任务开始其旅程时运行。

2. 并发和并行之间的主要区别是什么?

并发处理涉及在重叠时间段内管理多个任务。而并行处理则意味着同时或在同一时间执行多个任务。并发系统使用多线程,而并行系统使用多进程。对于需要响应用户交互的用户界面问题来说,并发至关重要。而并行主要用于解决通常被分成子任务的计算问题。虽然并发是关于如何正确利用程序避免阻塞,但并行性则与速度和性能有关。此外,所面临的具体挑战(例如同步问题和调试等)也构成了它们之间的差异。

3. 多线程是并行还是并发?

不,多线程概念与并行无关。多线程是指同时执行超过一个指令流的情况下进行的一种同时操作方式。其工作原理是可以将单个代码扩展到多个线程中去执行。而平台化则适用于具备多核心处理器、通过分布式计算实现等特点的情况下进行操作。在这方面,由于只有单核心参与运算和执行操作,因此它被视为一种同时属性。

4. 可以有并发但不能有并行吗?

是的,很有可能存在并发而不是并行,就像也有可能相反。我的意思是一个程序可以在多个任务同时处理的情况下具备并发性但不具备并行性。但请注意,这些任务不能同时执行,它们在不同的时间间隔内执行。另外,一个程序可以具备并行性但不具备并发性,即单个任务的多个进程将被分解为子任务,并同时执行。这就是并发和并行的工作方式。其中一个是同时进行的,而另一个则不是。


结    论

通过本文我们向您介绍了这两种处理技术,需要注意的是,在现代计算中,这两种处理技术都至关重要。由于高效和响应迅速的系统,这些过程具有独特的特点。然而,它们都有各自的优缺点。并发性使系统能够有效地管理多个任务,并确保响应能力;而并行性则利用多个处理单元来实现复杂且灵活的计算,以达到一流和快速的速度。
因此,在数字基础设施领域构建强大、高效和高性能软件系统时,理解和掌握这些处理概念是必不可少的。简单来说,可以说并行系统总是具备并发性,但并发系统不一定具备并行性。

这篇文章有用吗?

点击星号为它评分!

平均评分 / 5. 投票数:

到目前为止还没有投票!成为第一位评论此文章。

No more articles