并发与并行
并发和并行是相关的概念,但存在细微差别。并发意味着两个或多个任务正在取得进展,即使它们可能没有同时执行。例如通过时间切片来实现,其中任务的各部分被顺序执行并且与其他任务的部分混合。另一方面,当执行可以真正同时发生时,并行性就出现了。
异步与同步
如果调用方在方法返回值或抛出异常之前无法继续进行,则方法调用被视为同步。另一方面,异步调用允许调用者在有限数量的步骤之后前进,并且可以通过一些附加机制(它可以是注册的回调,Future或消息)来发信号通知方法的完成。
同步API可以使用阻塞来实现同步,但这不是必需的。CPU密集型任务可能会产生与阻塞类似的行为。通常,最好使用异步API,因为它们可以保证系统能够进步。
非阻塞与阻塞
如果一个线程的延迟可以无限延迟一些其他线程,就是阻塞。一个很好的例子是一个资源,它可以由一个使用互斥的线程专门使用。如果线程无限期地保留资源(例如,意外地运行无限循环),则等待资源的其他线程无法进行。相反,非阻塞意味着没有线程能够无限期地延迟其他线程。
非阻塞操作比阻塞操作更受欢迎,因为当它包含阻塞操作时,系统的整体进度并不是很容易保证。