进程和线程

在并发编程中,有两个基本的执行单元:进程和线程。在 Java 编程语言中,并发编程主要与线程有关。但是,过程也很重要。

计算机系统通常具有许多活动的进程和线程。即使在只有一个执行核心,因此在任何给定 Moment 只有一个线程实际执行的系统中,也是如此。通过称为时间分片的 OS 功能,单个内核的处理时间在进程和线程之间共享。

计算机系统具有多个处理器或具有多个执行核心的处理器变得越来越普遍。这极大地增强了系统同时执行进程和线程的能力-但即使在没有多个处理器或执行核心的简单系统上,并发也是可能的。

Processes

流程具有独立的执行环境。流程通常具有一套完整的私有基本运行时资源;特别是,每个进程都有自己的存储空间。

流程通常被视为程序或应用程序的同义词。但是,用户视为单个应用程序实际上可能是一组协作过程。为了促进进程之间的通信,大多数 os 都支持进程间通信(IPC)资源,例如管道和套接字。 IPC 不仅用于同一系统上的进程之间的通信,而且还用于不同系统上的进程。

Java 虚拟机的大多数实现都是作为单个进程运行的。 Java 应用程序可以使用ProcessBuilder对象创建其他进程。多进程应用程序超出了本类的范围。

Threads

线程有时称为轻量级进程。进程和线程都提供执行环境,但是创建新线程所需的资源少于创建新进程的资源。

线程存在于一个进程中-每个进程至少有一个。线程共享进程的资源,包括内存和打开的文件。这样可以进行有效的通信,但可能会出现问题。

多线程执行是 Java 平台的基本功能。每个应用程序至少都有一个线程,或者,如果算上执行内存 管理 和 signal 处理之类的“系统”线程,则至少有几个。但是从应用程序程序员的角度来看,您仅从一个线程(称为主线程)开始。该线程具有创建其他线程的能力,我们将在下一部分中进行演示。