1.什么是线程
进程: 资源的管理(管理内存,管理打开的文件等。。。)
线程: 线程是运行在进程之中的,一个进程包含若干线程,和进程相似,也是抢先式的调度(Linux也把线程叫做轻量级进程LWP)
ps:进程是资源分配的基本单位,线程是调度的基本单位
2.线程的优点
- 创建一个线程要比创建一个进程的开销小的多(线程之间共用一个虚拟地址空间)
- 线程之间切换比进程之间切换的工作要少的多
- 线程占用的资源要比进程少的多
- cpu密集型应用,为了在多个cpu上运行,将计算分解到多个进程中实现
- I/O密集型应用,为了提高性能,将I/O操做重叠,线程可以同时等待不同的I/O操作
3.线程的缺点
- 健壮性降低:一个线程异常终止会导致整个进程异常终止,线程是进程的执行分支,线程出现异常,类似进程出现异常,触发信号机制,终止进程,该进程内的所有线程随机退出。
- 编程/调试难度大:
a)对线程的可靠性要求更高
b)线程安全问题- 性能降低:一个很少被外部事件阻塞的计算密集型线程往往无法与共它线程共享同一个处理器。如果计算密集型线程的数量比可用的处理器多,那么可能会有较大的性能损失,这里的性能损失指的是增加了额外的同步和调度开销,而可用的资源不变。
- 缺乏访问控制:进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响。
4.进程的多个线程之间共享同一虚拟地址空间
a)线程之间共用的资源
- 虚拟地址空间
- 文件描述符表
b)线程之间共用的资源
- 栈(函数调用栈,局部变量)
- 上下文信息(cpu中的寄存器)
- errno(每个线程都有自己的errno)