线程是程序执行的最小单元,一个标准的线程是由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成。此外线程是进程中的一个实体,是被系统独立调用和分配的基本单位。线程的运行只需要一些必不可少的资源,但它与同属于同一个进程的其他线程共享进程所拥有的的全部资源。一个线程可以创建和销毁另一个线程,同一进程中可以并发执行多个线程。由于线程之间相互之约,线程在运行的过程中是交替使用CPU的,所以呈现出间断性。
线程有三种基本状态:就绪、阻塞和运行。
就绪状态是指线程具备了运行的所有条件,在逻辑上已经是可执行的,就在等待时间一到就可以执行;运行状态是指线正在占用处理机,正在运行中;阻塞状态是指线程在等待另一个线程执行完成。
每个程序进程至少有一个线程,如果一个程序进程只有一个线程,那么这个线程就是程序进程本身。
线程是程序中一个单一的顺序控制流程,是在一个进程内部相对独立、可以调度地执行单元。在单个程序中多个线程可以完成多个不同的任务,这个操作就被称为是多线程机制,在多少的系统中多线程都可以很大程度的提升执行效率。
进程与线程进程和线程是并发编程的基本概念,在大多数的编程语言中都有进程和线程的概念。
一个计算机系统中通常可以有多个线程和多个进程存在,但是在给定的时间内,每个处理器只能处理一个进程的任务。对于单核的处理来说,处理时间是通过时间片在进程和线程之间切换进行共享。
进程有一个相对独立的执行环境,通常有一个完整的、私有的运行时间资源。每个进程都有自己独立的内存空间,操作系统的进程表(Process Table)存储了CPU寄存器的值、内存映射、打开的文件、统计信息和特权信息等信息。进程一般是被定义为执行中的程序,也就是当前操作系统上某个虚拟处理器上运行的一个程序。多个进程并发共享同一个CPU的硬件资源。而操作系统是支持进程之间的相对隔离,实现这种并发透明需要付出的成本也是相对较高的。
在一般情况下,进程可以看做是一个程序。但在用户看到的一个独立运行的程序则是由很多的进程协同完成。而大多数的操作系统都是支持进程之间通信(IPC),例如管道和Socket。IPC不仅可以用来完成同一个系统的进程通信,还可以用于不同系统之间的进程通信。
线程,被称为是轻量级的进程,进程和线程都提供了一个执行环境,但是创建一个新的线程要比创建一个新的线程需要更少的资源。线程系统一般只维护一些用来让多个线程共享CPU所必需的最少的信息,特别是线程上下文(Thread Context)中一般只包含CPU上下文以及某些其他线程的管理信息,通常会忽略那些对于多线程管理不必要的信息。这样单个进程中为了防止数据遭到某些不合法线程的访问就完全落在应用程序开发人员手中。线程不像是进程那样彼此之间是隔离的,而且还会受到操作系统的保护,所以在多线程程序开发过程中需要开发人员时刻关注线程安全问题。