并发是让两个任务在不同的线程上并行运行。但是,异步方法在同一个线程上并行运行。这是如何实现的?另外,并行性呢?
这三个概念有什么区别?
并发和并行实际上是您正确推测的相同原理,两者都与同时执行的任务有关,尽管我会说并行任务应该是真正的多任务,“同时”执行,而并发可能意味着任务共享执行线程,同时似乎仍在并行执行。
异步方法与前两个概念没有直接关系,异步用于呈现并发或并行任务的印象,但实际上异步方法调用通常用于需要在当前应用程序之外完成工作的进程,我们不这样做’不想等待并阻止我们的应用程序等待响应。
例如,从数据库中获取数据可能需要一些时间,但我们不想阻止我们的 UI 等待数据。异步调用采用回调引用,并在向远程系统发出请求后立即将执行返回给您的代码。您的 UI 可以在远程系统执行所需的任何处理时继续响应用户,一旦它将数据返回给您的回调方法,那么该方法可以适当地更新 UI(或移交该更新)。
从用户的角度来看,它看起来像多任务处理,但可能不是。
编辑
可能值得补充的是,在许多实现中,异步方法调用会导致线程启动,但这不是必需的,它实际上取决于正在执行的操作以及如何将响应通知回系统。