首页 > 系统相关 >【技术研究】线程和进程

【技术研究】线程和进程

时间:2023-09-25 15:22:40浏览次数:47  
标签:栈区 函数 创建 技术 线程 进程 执行

有一句概念“进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。”
分上下句去理解他吧,首先贴一张图

所看到是一个进程的内存空间,分为一些栈区,堆区,一些资源区等等。
“进程是操作系统资源分配的基本单位”,进程包含一个程序的执行实例,说的具体点就是他有自己的内存空间,文件描述符等。进程和进程之间相互独立,隔离,进程之间通过(IPC)来进行数据交换和协作。再具象一点进程就是上图的一段空间。
“而线程是处理器任务调度和执行的基本单位。”,可以把线程理解成生产线,一个生产车间就是进程。一个生产车间里面至少有一个生产车线,工人根据一定的策略去选择生产线进行生产,某条生产线完成之后根据一定的策略去选择另外一条生产线。在计算机当中就表现为,一个进程当中至少有一个线程用力进行任务执行,处理单元根据一定的策略去选择要执行的线程,执行结束后选择下一条线程(这一定程度上也是并发)。线程之间有资源共享,这也意味着如果一个线程出现了问题,其他线程可能也会出现问题。
那一个进程是如何创造出来的呢?

  1. 分配空间 操作系统要为新的进程分配内存空间,用于存储程序的代码,数据和堆栈等信息
  2. 设置上下文,要为新的进程建立独立的执行环境,比如PC,寄存器等等
  3. 加载程序 操作系统将可执行程序或者运行时文件
  4. 初始化资源 需要初始化进程需要访问的各种资源(文件,网络连接,设备)等
  5. 启动执行 在上面这些步骤完成之后,操作系统会将进程的执行引导到程序的入口点,开始执行相应的代码。


    一个线程是如何创造出来的呢?
    需要注意的是线程是进程被创造出来之后创造的。
  6. 线程创建函数调用 编写程序的时候CreateThread这类函数创造一个新的线程,这些函数通常接受一个线程入口函数,和函数作为参数。
  7. 创建线程控制块,也就是昨天的TCB。操作系统会在内核区域开辟一块新的内存区域,保存该线程的信息,这个内存的区域就是用来存放TCB的。
  8. 初始化线程属性 初始化一些属性,例如这个优先级,调度的策略等等。
  9. 分配线程栈空间 就是我之前所理解的分配在进程空间当中的栈区。
  10. 设置线程入口函数和参数 将上面创建线程时候的参数和函数作为参数,将这些信息保存在TCB当中。
  11. 线程调度和执行 创建之后就进入了就绪状态,等着调度算法调度他进入运行态。


    关于线程的栈区与栈帧
    上面已经了解到,被创建的线程都有一个他专属的栈区,那栈帧是什么东西?
    栈帧是一种数据结构,用来活动记录,每次函数调用都会创建一个栈帧,存储该函数的参数啊,返回地址啊局部变量啊等等函数调用。
    需要注意的是栈帧被存放在线程的栈区内,每调用一个新的线程的新的函数,就会创建出一个新的栈帧,待到这个任务结束后需要调用新的线程的新的函数,就会将旧的线程的上下文保存在他的栈帧里面,然后创建出一个新的线程的栈帧。等到这个新的线程被执行结束之后需要调用回去,就不用创建出新的栈帧,而是恢复之前那个保存的栈帧。
    所以也可以将栈区的大小一定程度上由最多产生的栈帧数目来决定。


    而如何判断一个线程可能会产生多少栈帧。
    这和我们上面讲的函数由比较深的关联
    函数调用深度 函数嵌套越多可能产生更多的栈帧
    递归调用 如果存在递归调用的情况,那么可能每一次递归都要产生新的栈帧
    函数内部的局部变量和对象 如果有大量局部变量和对象,会导致栈帧大小的增加,从而影响栈帧的数量
    编译器和编译选项 数量也很大程度上取决于编译器的优化策略。

标签:栈区,函数,创建,技术,线程,进程,执行
From: https://www.cnblogs.com/Corax0o0/p/17727994.html

相关文章

  • Java中的线程池的线程数量如何确定?
    可能很多人都看到过一个线程数设置的理论:CPU密集型的程序-核心数+1I/O密集型的程序-核心数*2不会吧,不会吧,真的有人按照这个理论规划线程数?线程数和CPU利用率的小测试抛开一些操作系统,计算机原理不谈,说一个基本的理论(不用纠结是否严谨,只为好理解):一个CPU核心,单......
  • 20 广域网技术PPP(Point to Point)协议/实验+理论
    广域网广域网是连接不同地区局域网的网络,通常所覆盖的范围从几十公里到几千公里。它能连接多个地区、城市和国家,或横跨几个洲提供远距离通信,形成国际性的远程网络。广域网和局域网的区别局域网是一种覆盖地理区域比较小的计算机网络。广域网是一种通过租用ISP网络或者自建......
  • 【红外图像】利用红外图像处理技术对不同制冷剂充装的制冷系统进行性能评估(Matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 最新域名和子域名信息收集技术
    本文部分节选于《web安全攻防渗透测试实战指南(第二版)》域名信息收集1.WHOIS查询WHOIS是一个标准的互联网协议,可用于收集网络注册信息、注册域名﹑IP地址等信息。简单来说,WHOIS就是一个用于查询域名是否已被注册及注册域名详细信息的数据库(如域名所有人、域名注册商)。在WHOIS查询......
  • 转 五分钟了解互联网Web技术发展史
    简介:1994年,万维网联盟(W3C,WorldWideWebConsortium)成立,超文本标记语言(HTML,HyperTextMarkupLanguage)正式确立为网页标准语言,我们的旅途从此开始。本文将沿着时间线,从**发现问题-解决问题**的角度,带领大家了解Web技术发展的关键历程,了解典型技术的诞生以及技术更迭的缘由,思......
  • 最新敏感信息和目录收集技术
    本文部分节选于《web安全攻防渗透测试实战指南(第二版)》  敏感信息和目录收集 目标域名可能存在较多的敏感目录和文件,这些敏感信息很可能存在目录穿越漏洞、文件上传漏洞,攻击者能通过这些漏洞直接下载网站源码。搜集这些信息对之后的渗透环节有帮助。通常,扫描检测方法有手......
  • 线程一些常用功能总结
    c++11通常单例模式如下:template<typenameT>classSingleton{protected:Singleton()=default;Singleton(constSingleton<T>&)=delete;Singleton&operator=(constSingleton<T>&st)=delete;staticstd::shared_ptr&......
  • 交易日均千万订单的存储架构设计与实践 | 京东物流技术团队
    一、订单系统概述1.1业务范围服务业务线:快递、快运、中小件、大件、冷链、国际、B2B合同物流、CLPS、京喜、三入三出(采购入、退货入、调拨入、销售出、退供出、调拨出)等1.2订单中心价值1、解耦(提升系统稳定性)**原系统:**交易与生产耦合在一起,业务新增需求,涉及个上下游多个系统。EC......
  • 程序员应该专注技术还是转管理?
    只要有得选,专注技术或是转管理。都可以。但对于大部分程序员来说,都没得选。专注技术,你得有基础,基础太差,技术发展的天花板很低;想转管理,虽然门槛没有专注技术那么高,但是,公司里的管理岗位非常少,凭什么轮得到你?喜欢技术,自己也有能力去研究,那么做一名技术专家非常好。真没有什么比每天做......
  • [WPF] 随笔1:MVVM在ViewModel更新Image控件的BitmapImage值时报:必须在与 DependencyObj
    MVVM在ViewModel更新Image控件的BitmapImage值时报:必须在与DependencyObject相同的线程上创建DependencySource原因:必须在UI线程创建BitmapImage=>链接解决方案:使用MemoryStream加载图片,并在UI线程转换成BitmapImage=>链接接下来是我的写法Tip:我用的是MVVMLightViewM......