线程(Thread)
在计算机科学中,一个线程是能够被一个调度器单独管理的最小的程序片段。在不同的操作系统中,线程与进程的实现不尽相同,但大多数情况下,线程是进程的组成部分。多个线程能够在一个进程中存在,并同时(concurrently)执行和共享资源如内存,然而不同的进程不共享这些资源。尤其是,在一个进程中的线程共享着执行代码和变量的值。
单处理器与多处理器系统
单处理器系统一般通过时间分片(time slicing)来实现多线程:CPU切换着不同的软件线程(software thread)。这种上下文切换一般足够快,所以用户感知上线程或任务是并行运行着的。在多处理器的系统中,多线程能并行地运行,每个处理器同时地执行不同的线程;在单核超线程(多硬件线程 hardware thread)的处理器中,不同的软件线程也能并行执行(我:这个跟处理器核心内部架构应该有关,负载均衡的过程)。
线程 vs. 进程
线程与传统的多任务操作系统进程的区别有:
1. 进程通常是独立的,而线程是作为进程的子集的存在;
2. 进程能够比线程携带更多的状态信息,而在进程中的多个线程共享着内存和其他资源等进程状态;
3. 进程拥有分开的地址空间,而线程共享着地址空间;
4. 进程只能通过系统提供的进程间通信(IPC)机制进行数据交流;
5. 在一个进程中,线程间的上下文切换通常比进程间的上下文切换要快;
进程
进程是计算机程序执行时的一个实例(instance)。它包含程序代码和它当前的活动。在不同的操作系统中,进程可以由许多线程并行执行而组成。
计算机程序是一种被动的指令集,而进程就是这些指令实际的执行过程。多个进程可能与同一段程序相关;比如,对同样一段程序,运行多个实例,这常常意味着多个进程被执行了。
多任务处理是一种允许多进程共享多处理器和其他系统资源的方法。每个CPU一次执行单个任务。然而,多任务处理允许在每个处理器在任务间切换而不必等待每个任务完成。在不同的操作系统中,这种切换可能发生在I/O操作中,或者其他需要被切换的情况,如硬件中止(interrupt)。