一、线程的概念
1.什么是线程?
线程是参与系统调度的最小单位。它被包含在进程中,是进程中的实际运行单位。一个线程指的是进程中一个单一顺序的控制流(或者说是执行路线、执行流),一个进程中可以创建多个线程,多个线程实现并发运行,每个线程执行不同的任务。
2.线程是如何被创建的?
当一个程序启动时,就有一个进程被操作系统(OS)创建,与此同时一个线程也立刻运行,该线程通常叫作程序的主线程(Main Thread)。
任何一个进程都包含一个主线程,只有主线程的进程称为单线程进程。除了主线程之外,还包含其它的线程的进程为多线程进程。其它的线程通常由主线程创建,也称为主线程的子线程。所以主线程通常会在最后结束运行,执行各种清理工作(如为子线程收尸)。
3.线程的特点
(1)线程是程序运行的基本单位。线程不单独存在,而是包含在进程中。进程不能运行,真正运行的是进程中的线程。
(2)同一个进程中的多个线程共享该进程中的全部系统资源,如文件描述符,虚拟地址空间和信号处理等。此外,这些线程都有各自的调用栈(call stack,线程栈),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage).
4.在并发处理多任务时,为何选择多线程而不是多进程?
所谓并发就是交替运行,多进程编程,进程间的切换开销大,通信麻烦且速度慢。
5.线程ID
每个线程也有其对应的标识,称为线程 ID。与进程相比,进程 ID 在整个系统中是唯一的,但线程 ID 不同,线程 ID 只有在它所属的进程上下文中才有意义。