当前位置: 首页 > article >正文

进程与线程之间的关系与区别

引入线程

在上一篇文章中我们简单提到了进程这个词,进程里包含四个属性(进程的状态,进程的优先级,进程上下文,进程的记账信息),在进程进程的创建的时候,操作系统需要分配资源,进程的销毁,需要释放资源,试想一下如果进行多进程程序编写的时候,我们可能会多次创建和销毁进程,这一来一回的操作势必就会导致资源的消耗以及程序的效率的下降,这时候就引入了线程的概念。

线程是进程进一步划分开来的,一个进程包含一个甚至多个线程

在同一个进程中,线程与线程是共享资源的

进程的开销大,线程的开销小

注意进程与进程是独立的,也就是说进程一旦创建好,就独立占据操作系统给它分配的资源(内存资源,网宽资源,硬盘资源,CPU资源),所以进程如果崩溃了,是不会影响到其他进程的执行的。

但是如果一个进程里的某个线程崩溃了,是会影响到其他线程的,甚至导致这个进程的崩溃。

进程是系统分配资源的最小单位,线程是系统调度的最小单位。

线程

多进程编程最大的问题就是进程的开销大,所以我们才引入了多线程编程。线程的创建、销毁、调度效率比进程更高,并且有自己独立的执行任务。

对于处理同一件事情来说,我们可以派出一个小组来去解决,但是如果想要快点解决问题,我们可以加派更多的小组,假定每个小组的配备是一致的(并且设备的费用是远远高于人力的),这就开销大了,但是如果我们在每一个小组里加派更多的人,也就是将小组扩容,这些人我们可以理解为线程,这同样也可以解决问题。


在同一个进程中,我们可以创建多个线程,但是线程与线程之间是存在共享资源的,所以一旦线程数目过多,那么就会导致线程之间的调度开销也会随之增大,这时候程序的效率就会下降。

简单来说,就是进程能提供的资源就这么多,线程一旦过多,就会导致线程之间的疯狂抢夺,程序的效率就会下降。


上面说道,线程与线程之间是共享资源的,所以是会存在两个甚至多个线程共同抢夺同一份资源的,这时候程序就由可能会出 bug ,这些由线程出现的 BUG,我们称为线程安全问题 / 线程不安全


如果一个线程出现异常,是有可能影响到整个程序的运行,甚至导致程序的崩溃,就算我们及时处理异常抛出异常也还是有可能没有办法阻止进程的终止。


http://www.kler.cn/a/323664.html

相关文章:

  • MySQL【五】
  • web——sqliabs靶场——第六关——报错注入和布尔盲注
  • @Autowired和@Resource的区别
  • 【大数据】MySQL与Elasticsearch的对比分析:如何选择适合的查询解决方案
  • 【鸿蒙开发】第十一章 Stage模型应用组件-任务Mission
  • 【数据分享】全国农产品成本收益资料汇编(1953-2024)
  • C++20中头文件compare的使用
  • 数据仓库简介(一)
  • 鸿蒙OS开发之动画相关示例分享, 关于弹出倒计时动画的实战案例源码分享
  • netty之Future和Promise
  • leetcode946. 验证栈序列
  • ARM GNU工具链
  • 赵长鹏今日获释,下一步会做什么?币安透露2024年加密货币牛市的投资策略!
  • 【数据结构-栈】力扣71. 简化路径
  • react-native如何一个项目生成两个安装包
  • 什么是Kafka?
  • 利用 Llama-3.1-Nemotron-51B 推进精度-效率前沿的发展
  • PlayerPerfs-不同平台的存储位置
  • 十一假期地区人流量出行大数据分析:技术驱动下的深度洞察
  • [Excel VBA办公]如何使用VBA批量删除空行
  • 基于微信小程序的网上商城+ssm(lw+演示+源码+运行)
  • 基于Hive和Hadoop的病例分析系统
  • Web会话跟踪+代码分析
  • 在C#中实现WebSocket的单聊和分频道聊天
  • Python 绘图艺术:解锁数据故事的三把密钥
  • AJAX(简介以及一些用法)