线程概念

橙三吉。 提交于 2020-02-22 19:39:01

一、多线程

  • 多线程的处理思路:一个运行中的程序中,具有多个执行流,各自完成一个功能模块的实现

  • linux的操作系统中:认为一个pcd就是一个执行流(pcd是操作系统调用一段程序运行的 实体–描述了程序的运行过程)

  • linux下的线程就是一个pcd
  • pcd:是一个进程
  • 现在,多个pcd可以共用同一个虚拟地址空间,这些pcd共用了一个运行中程序的资源
  • linux下的线程就是一个pcd是一个轻量级进程,因为一个运行中程序的多个pcd共用同一 份资源
  • 一个运行中的程序就是一个进程,以前我们所说的进程,这时候再来解释,就是具有一个线程的进程,linux下的线程是一个pcb(轻量级进程),是一个进程中的一条执行流;
  • 进程就是一个线程组

二、进程/线程
1、进程跟线程是要一起说的(否则单一说会有一种冲突感)
2、进程就是一个运行中的程序,操作系统会创建一个pcb(运行中程序的描述),并且分配资 源,通过pcb来调度运行整个程序
3、线程是一个进程中的执行流,但是linux下实现进程中的执行流的时候,使用了pcb实现
4、因此就说linux下的线程是一个pcb,称作轻量级进程,因为同一个进程中的线程共用进程 分配的资源
5、而进程就是所有线程的统称,就是一个线程组,系统在运行程序,分配资源的时候是分 配给线程组,分配给整个进程
进程是资源分配的基本单位,线程是cpu调度的基本单位

三、 线程之间的独有与共享
线程是一个pcb; 一个进程中若有多个线程,也就意味着有多个pcb,这些pcb共用同一个虚 拟地址空间; 它是如何做到同时运行而不会出现栈混乱的情况的呢?

线程之间的独有与共享
1>独有:栈(每个线程一个,就可以避免出现栈混乱了),寄存器(每一个pcb都是一个执行流),信号屏蔽字(阻塞自己想阻塞的信号),errno (每调用一次系统调用都会重置errno)
2> 共享:代码段和数据段(虚拟地址空间),信号的处理方式,I0信息, 工作路径,用户id,组id

四、多线程的优缺点

多线程任务处理相较于多进程的优点:
1.线程间的通信更加灵活方便(出了进程间通信方式以外,还可以通过全局变量/函数传参实 现通信)
2.线程的创建和销毁成本更低(线程间共享进程等的大部分资源)
3.同一个进程中的线程间调度成本更低(切换页表,数据)
4.线程的执行粒度更加细致
缺点:
1、线程间缺乏访问控制,有些系统调用(exit)或者异常是针对整个进程产生效果
2、多线程任务处理没有多进程任务处理稳定性高
应用场景:多进程应用场景,对主程序的稳定性安全性要求更高的场景,比如shell/网络服务 器;

五、多进程/多线程进行并发/并行任务处理的优势

  • I0密集型程序:在程序中进行大量的I0操作,但是对cpu资源要求并不多
    在操作系统层面实现平衡化(循环调度;循环对一个线程中的IO发出请求,不需要等待上一个完 成后才能进行下一个的请求),并行压缩了I0的等待时间
  • CPU密集型程序:在程序中进行大量的数据运算,对cpu资源要求更多
    多执行流操作,可以更加充分的利用cpu资源;在多cpu情况下,多个执行流可以实现并行处理,提高效率
    在这种情况下,到底线程创建多少个比较合适: cpu核心数+1 (线程创建的太多,反而会增 加调度成本)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!