本文翻译自:https://medium.com/swift-india/concurrency-parallelism-threads-processes-async-and-sync-related-39fd951bc61d
最近,我的一个朋友问我关于并发和并行性的问题。当我开始向他解释他查询到的答案时,我们开始讨论其他相关概念和术语,例如线程->多线程和单线程,异步和同步。在某一点上,我们对以下查询感到困惑:
并发与并行性有何关系?
什么是同步和异步执行?
同步和异步编程在并发和并行性中的重要性是什么?
线程如何与所有这些概念一起使用?
我们有时也会对这些概念感到困惑。尝试通过查询回答以上问题,并亲自写demo试验。
因此,让我们检查一下您是否掌握正确。我们将分析并了解它们实际上是什么以及它们之间的关系。
一、并发和并行
并发
思考给同时你一个唱歌和进食的任务,在给定的时间情况下,您会唱歌或吃饭,因为这两种情况都涉及您的嘴巴。因此,要执行此操作,您需要先吃一段时间,然后唱歌并重复此操作,直到食物吃完或歌曲结束为止。因此,您可以同时执行任务。
在计算机科学领域,在各种处理器中实现并发的方式不同。在单核环境(即您的处理器具有单核)中,并发是通过称为上下文切换的过程实现的。如果是多核环境,则可以通过并行实现并发。
在单个核心环境中执行任务。任务在上下文之间切换。
并行
考虑给您做两个烹饪任务,并通过电话与您的朋友交谈。您可以同时执行这两件事。您既可以做饭,也可以通过电话讲话。现在,您正在并行执行任务。
并行是指同时执行两个或多个任务。计算机科学中的并行计算是指同时执行多个计算的过程。
在同一时间段内同时执行两个任务。
那么并发和并行的关系是什么呢?
并发和并行是指专注于如何执行任务或计算的计算机体系结构。
在单个核心环境中,并发发生于通过上下文切换在相同时间段内执行的任务,即在特定时间段内,仅单个任务被执行。
在多核环境中,并发可以通过并行执行多个任务同时执行来实现。
二、线程和进程
线程
操作系统调度的最小单位,程序可以是单线程或多线程。线程是可以相互独立执行的一系列代码执行序列。
进程
资源分配的最小单位,一个程序可以有多个进程。进程通常从单个线程(即主线程)开始,但随后在执行过程中它可以创建多个线程。
应用程序中进程和线程的分布。
三、同步和异步
同步
想象一下你同时写两封信一封给妈妈一封给你最好的朋友,你不能同时写两个字母除非你是专业的人士。
在同步编程模型中,任务一个接一个地执行。每个任务等待任何先前的任务完成,然后执行。
异步
想象你做一个三明治,然后用洗衣机洗衣服。您可以将衣服放在洗衣机中,而无需等待做完,您可以去做三明治。在这里,您异步执行了这两个任务。
在异步编程模型中,当一个任务被执行时,您可以切换到其他任务,而无需等待前一个任务完成。
同步--单线程
同步--多线程
异步--单线程
异步--多线程
同步和异步在并发和并行中的作用是什么?
异步编程模型可以帮助我们实现并发。
多线程环境中的异步编程模型是一种实现并行性的方法。
总结
并发和并行
执行任务的方式。
同步和异步
编程模型。
单线程和多线程
任务执行的环境。