• 线程的概念


    目录

    进程和程序的联系

    线程和进程的联系

    JAVA线程 


    补充并发并行串行的概念

    拿餐厅吃饭举例子,餐厅来了三个客人,有这些菜的需求

    • 串行:就是这个餐厅只有一个厨师,想要满足3个客人的要求,只能一道一道的去做菜,先满足完你的三道菜的需求,才能去满足我的三道菜的需求。这种按顺序一道一道满足的模式就是串行处理方式
    • 并行:这个餐厅有三个厨师,每个厨师去服务自己的客户,这样就是同时满足三个客户的需求,这种处理模式就是并行处理方式
    • 并发:餐厅还是只有一个厨师,但是我给其中一个客户做了一道菜,然后就转向给另一个用户做菜,按照一种时间片的概念去处理,每个时间片可能处理的事情是不一样的
    • 如果厨师做菜的速度非常快,1分钟就能出一道菜,那么我上了一道菜,然后过了3分钟又出了一道菜,那么在现实生活中,我们就会感觉这个厨师就是专门在为我们服务,将这种思想用到计算机中,我们知道CPU的处理速度是非常快的,基本是以ns为单位的处理速度,所以在CPU在并发的执行计算机任务,在我们主观的意识中,我们就感觉这个CPU是在并行的处理任务

    进程和程序的联系

    什么是程序

    程序就是一系列有组织的文件,封装操作系统的各种API,实现不同的效果(程序就是指令序列,程序的代码放入程序段中,输出和输入的数据放入数据段中),比如QQ就是一个程序

    什么是进程

    进程就是程序执行的一次执行过程,是系统进行资源分配的一个独立最小单位(资源指CPU,内存等关键系统资源)

     比如我登录了两次QQ,那么我在后台任务管理器,出现了两次QQ的进程,每个进程都是QQ执行的一次过程

    为何引入进程

    因为当代操作系统都是具有多道程序技术实现并发处理,在内存中会放入多个程序,那么会存在多个程序段和数据段,操作系统如何正确找到对应的程序和数据段,所以引入了进程的概念(为了使程序可以并发的执行,并且可以对并发执行的程序加以描述和控制

    进程和程序的区别

    1. 进程是动态的,程序是静态的
    2. 进程可以并发执行,但是程序不可以
    3. 二者无一一对应的关系
    4. 进程与程序又有密切的联系: 进程不能脱离具体程序而虚设, 程序规定了相应进程所要完成的动作。
    5. 组成不同。进程包含PCB、程序段、数据段。程序包含数据和指令代码。
    6. 程序是一个包含了所有指令和数据的静态实体。本身除占用磁盘的存储空间外,并不占用系统如CPU、内存等运行资源。
    7. 进程由程序段、数据段和PCB构成,会占用系统如CPU、内存等运行资源。
    8. 一个程序可以启动多个进程来共同完成。

    例子

    线程和进程的联系

    什么是线程 

    现代操作系统都是多线程操作系统,线程就是进程的一个子任务,进程就是轻量级的进程

     我们打开的浏览器这个进程,然后每打开的一个网页都是独立的线程,每个线程都可以执行一个子任务

    为什么引入线程

    有些进程可能需要“同时”做很多事,但是传统的进程只能串行得与执行一系列程序(比如你在使用QQ时,你登陆了账号,相当于创建了一个进程,你可以一边打字,一边视频聊天,这些是“同时”进行的,但是传统的进程是不能实现这样的功能,所以引入线程,加快并发的速度

    • 如果说在OS中引入进程的目的是为了使多个程序能够并发执行,比提高资源利用率和系统吞吐量,那么在OS中引入线程,是为了减少程序在并发执行时所付出的时间和空间开销,让OS具有更好的并发性(让进程并发得完成多种功能) 
    • 引入了线程之后,进程是除CPU之外系统资源的分配单元,如打印机,内存空间都是分配给进程的
    • 引入了线程之后,不仅程序能够并发执行了,进程也能并发执行了,从而提高了系统并发度

    线程和进程的比较

    1. 进程是OS资源分配的基本单位,线程是调度的基本单位
    2. 创建和消耗进程的开销远远比创建和消耗线程大的多
    3. 调度一个线程比进程快的多
    4. 进程包含线程,每个进程至少包含一个线程(主线程)
    5. 进程之间相互独立,不同的进程不会共享内存空间,但是同一个进程的线程会共享内存空间(共享进程的资源),线程几乎不拥有系统资源
    6. 在多CPU操作系统中,不同的线程可以去占用不同的CPU
    7. 同一进程的线程切换不会导致进程切换,但是不同进程的线程切换,会导致进程的切换

    JAVA线程 

    • java 主类名称 启动的是JAVA进程 
    • 类中的主方法是这个类的主线程
    • 线程是操作系统中的概念 . 操作系统内核实现了线程这样的机制 , 并且对用户层提供了一些 API 供用户使 用( 例如 Linux pthread ). Java 标准库中 Thread 类可以视为是对操作系统提供的 API 进行了进一步的抽象和封装

  • 相关阅读:
    uniapp 获取地理位置(uni#getLocation和高德sdk获取中文地址)
    深圳市商务局2022年电子商务创新发展扶持计划跨境电商通关监管场所服务奖励项目申报指南
    解决android中 ExifInterface.setAttribute()无效问题
    SpringBoot
    【FPGA教程案例83】接口案例3——基于FPGA的AGC自适应增益控制系统开发
    为什么选择WordPress作为企业CMS?
    HTTPS工作过程,国家为什么让http为什么要换成https,Tomcat在MAC M1电脑如何安装,Tomcat的详细介绍
    构造函数调用原则
    基于QT Creator 5.14的仿QQ聊天系统【UDP通讯】
    【机器学习】数据预处理与特征工程
  • 原文地址:https://blog.csdn.net/qq_50985215/article/details/125440974