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