【Linux】线程-线程概念

什么是线程

实际上,线程是一个进程内部的控制序列,一个程序的一个执行线路就是一个线程。

并且一个进程中至少有一个线程,本质上,一个进程内部如果有多个线程,那么这些线程实际上是指向同一块地址空间的。而不论进程还是线程,从CPU看来都是一个PCB,只是说线程的PCB要比进程更加轻量化一些。意味着当需要进行切换时,线程切换的代价要远低于进程切换。

在这里插入图片描述

线程的优点和缺点

优点:
1.我们知道,并发和并行,那么当我们的进程中有多个执行流的时候,利用并行的方式可以极大的提高程序运行效率。
2.进程切换的代价要比线程切换的代价大的多
3.线程占用的资源要比进程少很多
4.可以并行的运行

缺点
1.当进程中的线程数量远远超过CPU的数量,可能线程切换的开销会影响进程运行的效率
2.对代码的鲁棒性要求更高
3.缺乏访问控制,编程的难度变高

线程的用途和线程异常

线程的用途:
合理的使用多线程,可以提高CPU密集型程序的执行效率
合理的使用多线程,也可以提高IO密集型程序的用户体验
线程异常:
当单个线程出现:越界访问,解引用空指针,管道破裂,除0,double free和栈溢出的情况时,会导致线程崩溃,从而触发信号机制,终止进程,当进程终止了,当前进程中所有的线程就都终止了。

线程与进程的区别

进程是操作系统进行资源分配的最小单位,而线程是操作系统进行调度的最小单位。同一个进程组中,有多个线程,多个线程都指向同一个进程虚拟地址空间,意味着各个线程是共享进程数据的。

但是如果仅仅是共享进程数据,那么就会出现调用栈混乱的情况,比如,主线程调用了func函数,其中调用了工作线程,当主线程的func函数要退出时,但是工作线程没有退出,按照压栈的操作来说,需要首先等工作线程退出后,才能退出主线程的func函数,这样就出现了调用栈混乱的情况。

为了防止出现这种问题,在进程虚拟地址空间内部,定义了一块共享区,其中就包含一个叫做调用栈,这样各个线程的调用栈是独立的,就不存在调用栈混乱的问题了。

在这里插入图片描述

线程独有的数据线程共享的数据
线程ID,调用栈、寄存器、erron,信号屏蔽字,调度优先级文件描述符表,信号的处理方式,工作目录,用户id和用户组id
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值