并发计算(英语:Concurrent computing,或译为并发处理、共时计算),是一种程序计算的形式,在系统中,至少有两个以上的计算在同时运作,计算结果可能同时发生。用来实现并发系统(Concurrent system)的
编程语言与各种
算法,统称为并发计算。
并发计算,简单来说,就是将一个计算任务,分区成几个小的部分,让它们同时被计算,之后再汇整计算结果,以完成任务。它跟并行计算(Parallel computing)与分布式计算,有重叠之处,在概念上不同,但常会让人混淆。
并发计算是一种程序运算的特性,可以被视为是并行运算的进一步
抽象,它包涵了
时间片这种可以被用来实现虚拟并行运算(pseudoparallelism)的技术,因此在实际的物理运作中,计算过程可能是
并行,或非并行的。
并行计算是指,当并发计算的程序,在机器平台上同时被运行的状况,因此,并行计算是一种机器运算的形式之一。
分布式计算(Distributed computing)则是并行计算的一个特例,它采用计算机网络来进行同步。
实现
并发程序有许多方式,依
编程语言与
操作系统的支持,可以用
进程,或是
线程来实现。它可以运行在单一
处理器上,将不同的运行步骤分散在不同
时间片中运行,以非
并行方式循序运算;它也可以用
并行计算来实现,将每个进程指定给处理器组中的某个处理器,以单片机多处理器平台,或是透过网络链接的
分散平台来实做。
依照硬件与操作系统的支持,并发计算可以在同一个进程中完成,在同一个进程中以多线程来完成,以多个进程来达成,甚至可以分成数个程序来运行。可以用单处理器的循序计算来实现,也可以采并行计算或分布式计算方式实做。
并发计算中,不同计算单元之间,需要进行通信以保持同步。这些通信方式,在某些并发编程语言中,是被隐藏起来的(例如,利用future方式)。以外显方式来进行通信,可分成两种主要方式:
并发性编程语言使用编程语言结构特性进行并发。这些结构涉及到多线程,分布式计算,消息传递,资源共享(包括内存共享)。有时候我们也称这些语言是面向并发的编程语言(COPL)。 如今很多常用的语言都拥有并发的特性,例如:Java和C#。这两种语言底层都是通过内存共享以及锁监听机制的并发模型来实现(尽管消息传递模型如今也是基于内存共享模型实现的)。在消息传递的并发模型世界中,Erlang最具代表性并被广泛使用至今。
很多并发性编程语言更多的是被用作研究(例如:Pict)而非生产用途。尽管如此,在最近20年,还是有很多语言例如 Erlang,Limbo和Occam被用于生产工业。类似这些并发性编程语言还包括: