一、 线程的概念, 总结Linux下线程有什么特点。
1)什么是线程
- 在一个程序里的一个执行路线就叫做线程(thread)更准确的定义就是“线程就是一个进程内部的控制序列”。线程是在进程内部运行的执行流(线程在进程的地址空间)。
- 一切进程至少有一个执行线程
- Linux没有真正的线程,用进程模拟线程,linux下的进程称为轻量级进程
- 线程是调度的基本单位
2)进程和线程
线程与进程的区别可以归纳为以下4点:
1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
3)调度和切换:线程上下文切换比进程上下文切换要快得多。 4)在多线程OS中,线程不是一个可执行的实体。 相关的补充说明:
- 进程是资源竞争的基本单位
- 线程是程序执行的最小单位
线程共享进程数据,但也拥有自己的私有的一部分数据,
- a)线程ID;
- b)一组寄存器;
- c)栈;
- d)errno;
- e)信号屏蔽字);
- f)调度优先级
其中最主要的是线程具有的是私有上下文数据和栈
进程和线程的关系图如下:
3)线程的共享资源
- 同一地址空间中因此Text Ssgment、Data Segment都是共享的,如果定义一个函数,在各线程中都可以进行调用,如果定义一个全局变量,在各线程中都可以访问到。除此之外,所有的线程还共享以下进程资源和环境
- 文件描述符
- 每种信号的处理方式(SIG_IGN、SIG_DFL或者自定义的信号处理函数)
- 当前工作目录
- 用户id和组id
线程的优点:
- 创建一个新线程的代价要比创建一个新进程的代价要小的多
- 与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少的多
- 线程占用的资源要比进程少很多
- 能够使用多处理器的课并行使用
- 在等待慢速I/O操作结束的同时,程序可执行其他的计算任务
- 计算密集型应用,为了能在多处理器系统上运行,将计算机分解到多个线程中去实现
- I/O密集型应用,为了提供性能,为I/O操作重叠,线程可以同时等待不同的I/O操作
线程的缺点:
- 性能损失
- 健壮性降低
- 缺乏访问控制
- 编程难度提高