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

06 为什么需要多线程;多线程的优缺点;程序 进程 线程之间的关系;进程和线程之间的区别

为什么需要多线程

  • CPU、内存、IO之间的性能差异巨大
  • 多核心CPU的发展
  • 线程的本质是增加一个可以执行代码工人

多线程的优点

多个执行流,并行执行。(多个工人,干不一样的活)
在这里插入图片描述
在这里插入图片描述

多线程的缺点

  • 上下文切换慢,切换上下文典型值1us vs 0.3ns/cycle

CPU在执行A任务(A没有执行完)时,切换到任务B,需要保存A的上下文内容,等待CPU切换到执行A任务使用。需要消耗大概1000个时钟周期。

不是说多线程是可以提高效率,怎么又说多线程慢呢。这里慢单纯指的是线程之间切换时消耗的时间和CPU的时钟周期相比慢。针对内存寻址、硬盘寻址是有提升的。

  • 占用资源:每个线程有独立的方法栈。

推荐阅读:我是一个CPU:这个世界慢!死!了!

线程相关概念

程序

程序(Program):程序的为了让计算机执行某些操作或解决某个问题而编写一系列有序的指令集合

软件的目的:提高人们的工作效率,简化工作流程。静态概念。

进程

进程(Process):进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 动态概念。

进程的特点:

  1. 结构性:由程序块CODE、数据块DATA、控制块CPU 组成。
  2. 共享性:同一程序运行在不同的数据集上时构成不同的进程。即多个进程可以共享一个程序。(如一台电脑同时登陆多个QQ)
  3. 动态性:进程是程序在数据集合上的一次执行过程,是动态概念。它有生命周期,由创建、执行、消亡、。
  4. 独立性:每个进程都以各自独立的速度在CPU上执行。
  5. 并发性:进程的并发性能够提高资源的利用率和系统的效率。
  6. 制约性:并发进程之间存在制约关系,也需要相互等待或互通消息,保证程序执行的可再现性和计算结果的唯一性。

进程的状态:就绪态ready、运行态running、阻塞blocked

进程的缺点占用较多的系统资源,浪费内存。

线程

线程(Thread):是操作系统进程中能够独立执行的实体(控制流),是处理器调度和分派的基本单位。 可以看成是进程内的多条执行路径。

进程的特点:并发性、共享性、动态性、结构性

  • 线程是轻量级的进程
  • 一个进程可以并行多个线程
  • 进程中的线程共享内存
  • 线程间通讯在共享内存中的地址空间上执行,不需要额外的通讯机制,故速度更快。
区别进程线程
本质区别程序是计算机分配资源单位线程是进程中CPU调度和执行的单位
开销进程有独立的计算机资源,进程间切换会有较大的开销线程可以当做轻量级进程,线程间资源共享,切换开销小
内存分配计算机会给进程分配独立的内存资源线程使用所在进程的资源
关系内有线程的进程可以当做单线程;一个进程可以有多个线程线程是进程的一部分,线程可以当做一个轻量级的进程
http://www.lryc.cn/news/119824.html

相关文章:

  • datax-web报错收集
  • YOLO相关原理(文件结构、视频检测等)
  • 深入解析Spring Boot的核心特性与示例代码
  • 什么是Java中的观察者模式?
  • 无涯教程-Perl - endhostent函数
  • Vue2使用easyplayer
  • Map映射学习
  • 【每日一题Day292】LC1572矩阵对角线元素的和 模拟
  • Mongodb:业务应用(2)
  • DSO学习笔记
  • 【Windows 常用工具系列 5 -- 如何在网页(CSDN)中实现右上角及右下角数字显示】
  • sql注入--报错注入
  • Nginx常用功能
  • 【Express.js】express-validator
  • 沁恒ch32V208处理器开发(三)GPIO控制
  • Jenkins 中 shell 脚本执行失败却不自行退出
  • 2021年12月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 计算机网络 网络层 IPv4数据报
  • 有哪些可以用于性能测试方法?【举例说明】
  • Linux进程管理命令
  • pytest 常用命令参数
  • 从安装 Seata 开始的分布式事务之旅 springboot集成seata
  • Laravel 使用mix引入本地样式文件 报错 Unable to locate Mix处理
  • QT学习笔记-QT安装oracle oci驱动
  • 【React学习】—类的基本知识(五)
  • 【AI】《动手学-深度学习-PyTorch版》笔记(十六):自定义网络层、保存/加载参数、使用GPU
  • 微软杀入Web3:打造基于区块链的AI产品
  • 聊聊51单片机
  • Linux yum 命令,Linux apt 命令
  • Vue+SpringBoot项目开发:登录页面美化,登录功能实现(三)