首页 > 其他分享 >多线程理论

多线程理论

时间:2024-05-29 12:33:37浏览次数:23  
标签:车间 一个 理论 线程 进程 流水线 多线程

【一】什么是线程

【1】介绍

  • 每个进程有一个地址空间,而且默认就有一个控制线程

  • 线程就是一条流水线工作的过程

  • 所以进程只是用来把资源集中到一起,而线程才是cpu上的执行单位

  • 多线程的概念是在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间,相当于一个车间内有多条流水线,都共用一个车间的资源。

【2】小结

  • 每一个进程必定自带一个线程

  • 进程:资源单位

    • 起一个进程仅仅只是 在内存空间中开辟出一块独立的空间
  • 线程:执行单位

    • 真正被CPU执行的其实是进程里面的线程
    • 线程指的就是代码的执行过程,执行代码中所需要使用到的资源都找所在的进程索要
  • 将操作系统比喻成大的工厂,进程相当于工厂里面的车间,线程相当于车间里面的流水线

【二】线程的创建开销

【1】创建进程的开销要远大于线程?

  • 如果我们的软件是一个工厂

  • 该工厂有多条流水线

  • 流水线工作需要电源

  • 电源只有一个即cpu(单核cpu)

    • 一个车间就是一个进程
      • 一个车间至少一条流水线(一个进程至少一个线程)
    • 创建一个进程
      • 就是创建一个车间(申请空间,在该空间内建至少一条流水线)
    • 而建线程
      • 就只是在一个车间内造一条流水线
      • 无需申请空间,所以创建开销小

【2】进程之间是竞争关系,线程之间是协作关系?

  • 车间直接是竞争/抢电源的关系,竞争

    • 不同的进程直接是竞争关系
    • 不同的程序员写的程序运行的迅雷抢占其他进程的网速
    • 360把其他进程当做病毒干死
  • 一个车间的不同流水线式协同工作的关系

    • 同一个进程的线程之间是合作关系,是同一个程序写的程序内开启动
    • 迅雷内的线程是合作关系,不会自己干自己

【三】线程和进程的区别

  • 线程共享创建它的进程的地址空间, 进程具有自己的地址空间

  • 线程可以直接访问其进程的数据段, 进程具有其父进程数据段的副本

  • 线程可以直接与其进程中的其他线程通信, 进程必须使用进程间通信与同级进程进行通信

  • 新线程很容易创建, 新进程需要复制父进程

  • 线程可以对同一进程的线程行使相当大的控制权,进程只能控制子进程

  • 对主线程的更改(取消,优先级更改等)可能会影响该进程其他线程的行为,对父进程的更改不会影响子进程

【四】为何要有多线程

【1】开设进程

  • 申请内存空间 -- 耗资源
  • 拷贝代码 - 耗资源

【2】开设线程

  • 一个进程内可以开设多个线程
  • 在一个进程内开设多个线程无需再次申请内存空间及拷贝代码操作

【3】总结线程的优点

  • 减少了资源的消耗,同一个进程下的多个线程资源共享

【4】什么是多线程

  • 多线程指的是 :在一个进程中开启多个线程

    • 简单的讲:如果多个任务共用一块地址空间,那么必须在一个进程内开启多个线程。
  • 多线程共享一个进程的地址空间

    • 线程比进程更轻量级,线程比进程更容易创建可撤销,在许多操作系统中,创建一个线程比创建一个进程要快10-100倍,在有大量线程需要动态和快速修改时,这一特性很有用
  • 在多cpu系统中,为了最大限度的利用多核,可以开启多个线程,比开进程开销要小的多。(这一条并不适用于Python)

【5】思考

(1)案例需求:开发一款文字处理软件进程

  • 获取用户输入的功能
  • 实时展示到屏幕的功能
  • 自动保存数据到硬盘的功能

(2)针对上述功能进程合适还是线程合适?

  • 开启一个文字处理软件进程
  • 该进程肯定需要办不止一件事情,比如监听键盘输入,处理文字,定时自动将文字保存到硬盘
  • 这三个任务操作的都是同一块数据,因而不能用多进程
  • 只能在一个进程里并发地开启三个线程
  • 如果是单线程,那就只能是,键盘输入时,不能处理文字和自动保存,自动保存时又不能输入和处理文字。

标签:车间,一个,理论,线程,进程,流水线,多线程
From: https://www.cnblogs.com/ligo6/p/18218354

相关文章

  • Java三种方法实现多线程,继承Thread类,实现Runnable接口,实现Callable接口
    目录线程:继承Thread类:实现Runnable类:实现Callable接口:验证多线程:线程:定义:进程可以同时执行多个任务,每个任务就是线程。举个例子:一个Java程序,如果同时有两个循环同时进行,就是线程。再比如,你用百度网盘,边看视频,边下载。继承Thread类:步骤写在代码里的classmythrea......
  • 如何进行接口优化?如何进行接口优化?多线程的核心参数有哪些?SpringCloud使用了哪些组件?
    在快速迭代的技术领域中,持续地回顾与总结项目经验不仅是个人成长的催化剂,也是智慧积累的关键环节,本次知识积累旨在深入剖析如何进行接口优化?如何进行接口优化?多线程的核心参数有哪些?SpringCloud使用了哪些组件?一、如何优化SQL?优化SQL语句以提高查询效率和性能是一项......
  • Java高并发编程详解:深入理解并发核心库(Java高并发编程详解:多线程与架构设计姊妹篇) (Ja
    我的阅读笔记:并发核心库概览:首先介绍Java并发核心库的组成,包括java.util.concurrent包下的主要类和接口,以及它们之间的关系。线程池技术:详细讲解Java中的线程池技术,包括线程池的创建、配置、使用以及调优。介绍不同类型的线程池(如FixedThreadPool、CachedThreadPool等)以及它们......
  • 28.并发编制【五】管道与多线程
    【一】管道1)介绍frommultiprocessingimportPipe#创建管道left_pipe,right_pipe=Pipe()#返回管道两端的连接对象,需在产生Process对象之前产生管道#默认参数dumplex:默认管道是全双工的#若为False,left_pipe只能用于接收,right_pipe只能用于发送2)主要方法#接收数......
  • 多进程理论
    【一】什么是进程【1】进程概念正在进行的一个过程或者说一个任务而负责执行任务则是cpu进程其实就是一个正在运行的程序【2】单任务单核+多道,实现多个进程的并发执行同一时刻只能做一个任务(cpu同一时间只能干一个活)【3】多任务同一时刻可以做多个任务【二】......
  • kafka多线程顺序消费
    一、单线程顺序消费为了避免有的小伙伴第一次接触顺序消费的概念,我还是先介绍一下顺序消费是个什么东西。双十一,大量的用户抢在0点下订单。为了用户的友好体验,我们把订单生成逻辑与支付逻辑包装成一个个的MQ消息发送到Kafka中,让kafka积压部分消息,防止瞬间的流量压垮服务。那么......
  • Java多线程与并行计算:深入剖析Java线程,线程池,以及利用Java进行并行计算的策略
    一、Java线程概述线程基础概念: 线程是操作系统调度的最小单元,它是进程的一部分,每个线程都有自己的程序计数器、栈和局部变量。线程之间共享进程的堆和方法区。 Java线程创建和启动: 在Java中主要有两种方式创建线程: 继承Thread类:创建一个新class,继......
  • LLM 大模型学习必知必会系列(四):LLM训练理论篇以及Transformer结构模型详解
    LLM大模型学习必知必会系列(四):LLM训练理论篇以及Transformer结构模型详解1.模型/训练/推理知识介绍深度学习领域所谓的“模型”,是一个复杂的数学公式构成的计算步骤。为了便于理解,我们以一元一次方程为例子解释:y=ax+b该方程意味着给出常数a、b后,可以通过给出的x求出......
  • 多线程常识
    多线程有什么用    多线程可以将一个程序分成多个线程同时进行,提高程序的执行效率。多线程可以同时处理多个任务,可以同时进行计算和I/O操作,可以充分利用多核处理器的能力。多线程还可以使程序在某些情况下更加稳定,例如当一个线程出现问题时,其他线程仍然可以正常工作。另......
  • 多线程基本常识
    多线程的状态   在Java中,一个线程的生命周期有以下几种状态:新建(New):当线程对象被创建时,线程处于新建状态。此时线程对象存在,但还没有调用start()方法启动线程。运行(Runnable):当线程调用start()方法后,线程进入就绪状态,等待被分配CPU时间片执行。当线程获取到CPU时间片后,......