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

进程和线程(2)

线程:

1.前面提到了进程,但是进程是一个比较“重”的概念。

因为在创建/销毁进程,开销是很大的。(尤其当我们需要频繁的创建/销毁进程)

为了解决上面的问题,我们引入线程(Thread),线程也是轻量级的进程(线程的创建和销毁开销更小)

1)进程中,每个进程都相当于是一个执行的任务。

2)线程中,每个线程也是一个执行的任务(运行的一段代码的指令)

3)每个进程中,都会包含多个线程

2.进程是操作系统资源分配的基本单位(cpu,内存,硬盘资源(文件描述符),网络带宽等资源)

进程内部中管辖的多个线程,这写线程会共享上面的内存资源,硬盘资源和网络带宽。 

通俗的说:进程就像吃火锅,线程就像火锅餐桌的人,资源就是火锅,你是吃不到别桌的火锅。

 线程的创建和销毁:

首先,我们知道进程的创建和销毁是重量级的事情。

1.对于线程来说:只有第一个线程创建的时候(和进程一起创建)一起申请资源。

后续再创建线程:不涉及到资源申请操作(干的事少,但快)

只有所有线程都销毁时,才能真正的释放资源(单独销毁某一个线程,不会释放资源)

2.对于进程来说:进程和进程之间,所涉及到的资源是各自独立的,彼此之间互不干扰(稳定性)。

线程调度:

每一个线程中,都有一份数据(其中包括线程状态,线程优先级,线程的记账信息和线程的上下文),如果一个进程里面有10个线程,就会有10份这样的数据。但是这10个线程共用一份(文件描述符表和内存指针)

线程在CPU上执行的这一系列过程,即线程调度,和前面讲的进程调度是一样的。

线程是CPU调度执行的基本单位:一个进程包含了多个线程,此时多线程之间,各自都会去CPU上调度执行。

比如:一个进程中有:线程1,线程2,线程3。他们在CPU上执行时有多种可能

注意:具体哪一线程去哪个核心执行并不是固定的。 

***线程安全问题:

在一定限制内,线程越多,整体的效率能够大幅度提高,节省了CPU的开销

比如上面吃火锅的例子:一个人吃一盆火锅的效率肯定慢于几个人吃火锅的效率;

但是如果吃火锅的人越多越快吗?那如果来一千个人吃一盆火锅,这样就会导致有的人吃不到,有的人又能吃到,就会增加竞争,同时火锅店也不一定能装下这一千人。所以效率也就不快反慢了。

线程也是如此,当线程数目达到一定程度后,就算线程再多,也没法起到效果了。还会拖慢效率,线程调度开销也会非常明显,从而拖慢程序的性能。

最重要的一个问题:当线程数目很多,可能导致多个线程并发访问共享资源且访问共享资源从而引发*线程安全问题

进程和线程的区别:

1.进程是包含线程的,且一个进程中至少包含一个线程,即包含一个主线程。

2.进程和进程之间是不共享内存空间的,只有在同一进程中的多个线程之间才共享同一个内存空间。

3.进程是CPU资源分配的最小单位,线程是CPU执行调度的最小单位。

4.因为进程和进程之间是互相独立的,所以一个进程挂了一般不会影响到其他的进程。

但是在同一个进程中,一个线程挂了,就有可能把该进程中的其他线程一并带走(整个崩溃)

http://www.xdnf.cn/news/949.html

相关文章:

  • 跨境电商行业新周期下的渠道突围策略
  • [python] set
  • JavaScript day5
  • 一文了解相位阵列天线中的真时延
  • 深度学习:人工智能的核心驱动力
  • C语言——数组
  • Sentinel源码—7.参数限流和注解的实现二
  • 字符串拼接问题的最佳解决方案
  • Shell常用功能详细使用
  • STM32 栈地址起始位置不正确
  • 【GIT】为什么要变基下拉,变基下拉失败,提示没有暂存如何解决?
  • 华为OD机试2025A卷七日集训第6期 - 按算法分类,由易到难,循序渐进,玩转OD(Python/JS/C/C++)
  • Transformer系列(三):Transformer架构
  • Spring Boot
  • Batch Size
  • MySQL 按照日期统计记录数量
  • VOS3000内存满了怎么删除,录音格式如何转换呢
  • JVM 内存分布详解
  • 基于Spring Boot+微信小程序的智慧农蔬微团购平台-项目分享
  • 存储器综合:内存条
  • GAIA-2:用于自动驾驶的可控多视图生成世界模型
  • 基于大模型的腹股沟疝全流程预测与诊疗方案研究报告
  • 杭电oj(2031、2033、2070、2071、2075、2089、2090、2092、2096)题解
  • 学习笔记(C++篇)--- Day 3
  • 掌握Go空接口强大用途与隐藏陷阱
  • 14.QT-多元素控件|QListWidget|QTableWidget|QTreeWidget(C++)
  • SpringBoot整合JWT Token:构建安全无状态认证体系的最佳实践
  • QGraphicsItem的shape和boundingRect方法
  • HarmonyOS:Navigation实现导航之页面设置和路由操作
  • 【 Git 全局忽略文件完全指南:配置、规则与最佳实践】