并发编程(一)cpu,进程,线程,并发

2023-05-16

文章目录

    • 一、程序和进程
        • 1.程序的进化论
        • 2.程序和进程的关系
        • 3.进程和线程的关系
        • 4.CPU和RAM的关联
        • 5.CPU、进程、线程之间的关系
        • 6.CPU如何执行
    • 二、线程
        • 1.线程的使用
        • 2.线程的生命周期
    • 三、并发和并行
        • 1.并发和并行
        • 2.高并发的定义以及实现条件
        • 3.多线程带来的问题

一、程序和进程

1.程序的进化论

在这里插入图片描述.java文件经过编译生成.class文件被加载到JVM,打包成jar包,再转换成windows可以执行的.exe文件。

exe:windows操作系统的可执行文件
jar:java开发,需要通过java虚拟机来运行

2.程序和进程的关系

在这里插入图片描述
程序:静态的指令和数据集合
进程:运行状态的程序,数据和指令会加载到内存中

程序启动后指令和数据被加载到内存中。

3.进程和线程的关系

在这里插入图片描述

线程:程序执行的最小单元(目前是,也许会出现比线程更小的执行单元)
进程:线程的集合

4.CPU和RAM的关联

在这里插入图片描述
cpu和内存之间是通过北桥芯片连接,进行数据交互

5.CPU、进程、线程之间的关系

在这里插入图片描述

一个cpu在同一时刻只能执行一个线程

cpu切换不同的线程执行的耗时叫做时间片

6.CPU如何执行

在这里插入图片描述
PC 程序计数器:存储了下一条指令的地址
ALU 逻辑运算单元
寄存器:从内存读取的指令和数据都存在这里

二、线程

1.线程的使用

①实现Runnable接口,重写run()方法

public class ThreadDemo implements Runnable {
    @Override
    public void run() {
        //用户自定义
        int i = 0;
        i = i+1;
        System.out.println("i="+i);
    }

    public static void main(String[] args) {
        
        //start()方法会创建一个新的线程去调用run()方法,而threadDemo.run()由主线程来执行
        ThreadDemo threadDemo = new ThreadDemo();
        Thread thread = new Thread(threadDemo);
        thread.start();   
    }
}

②继承Thread类

public class ThreadDemo extends Thread  {

    public static void main(String[] args) {
        Thread thread = new ThreadDemo();
        thread.start();
    }

2.线程的生命周期

在这里插入图片描述①NEW 初始状态:实例化一个线程时,就是该线程的生命起点 ;

②RUNNABLE 运行时:就绪态和运行中统称为运行时状态;

③WAITING 等待状态:调用方法,释放时间片和锁,需要人工唤醒;

④TIME_WAITING 等待状态:相当于指定了等待的时长,不会释放锁,到点儿自动唤醒,从上一次执行的地方继续执行。

⑤BLOCKED 阻塞状态:A线程要执行Sychronized包裹的代码,但是当前已有线程占用,所以等当前线程执行完毕释放锁,A就会被唤醒去竞争锁来获得Sychronized包裹的代码的执行权。
举个例子:你要去上厕所,但是厕所已经有人在用了。你只有等这个人出来,才能使用厕所

⑥TERMINATED 终止状态:run()方法执行完毕,线程生命结束,被GC回收。

三、并发和并行

1.并发和并行

在这里插入图片描述

并行:同时进行,如CPU1和CPU2属于并行状态,能同时并行2个任务
并发:同一时刻内,能处理的任务数。如上图,t1时间内,能处理的最大任务数是6(thread1-thread6)

多线程:为了提升性能和资源利用率

举例:运动会接力棒比赛,4个队伍参加,比赛时长30分钟。
4个队伍同时进行,就是并行。
30分钟内传递的了多少人,这个就是并发量。

2.高并发的定义以及实现条件

高并发::当前系统能够同时承载的并发数
参考
高并发的条件:

①.硬件资源:

  • cpu,核心数,并行任务数量
  • 内存
  • 磁盘
  • 网卡

②软件

  • 线程:同时运行的线程数量
  • IO:数据库交互
  • 分布式,解决单节点瓶颈

3.多线程带来的问题

三大特性:原子性、可见性、有序性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

并发编程(一)cpu,进程,线程,并发 的相关文章

  • Latex/Markdown中将字母上下方插入字母数字

    Latex Markdown中将字母上下方插入字母数字 演示在typora软件里面插入Latex公式 通常在字母前面加入 mathop将 中的字母数字当作数学符号使用 xff1b 都加 mathop xff1a 1 xff1a 不加 lim
  • Python实例5:身体质量指数BMI问题分析

    Python实例5 xff1a 身体质量指数BMI问题分析 问题需求 xff1a 1 xff09 输入 xff1a 给定体重和身高值 xff1b 2 xff09 输出 xff1a BMI指标分类信息 xff08 国际和国内 xff09 xf
  • Python实例7:七段数码管绘制

    Python实例7 xff1a 七段数码管绘制 基本思路 xff1a 绘制单个数字对应的数码管 xff1b 获得一串数字 xff0c 绘制对应的数码管 xff1b 获取当前系统时间 xff0c 绘制对应的数码管 xff1b 步骤 xff1a
  • Python实例13:体育竞技分析

    Python实例13 xff1a 体育竞技分析 8 1 1 问题分析 需求 xff1a 毫厘是多少 xff1f 如何科学分析体育竞技比赛 xff1f 输入 xff1a 球员的水平 xff1b 输出 xff1a 可预测的比赛成绩 xff1b
  • 解决anaconda虚拟环境连接不上jupyter的kernel的方法(无法连接服务)

    jupyter日志 xff1a ImportError cannot import name AsyncGenerator 问题 xff1a 在anaconda中创建conda虚拟环境后安装ipykernel xff0c 在jupyter中
  • Tensorflow代码学习-8-3下载google图像识别网络inception-v3并查看结构

    下载google图像识别网络inception v3并查看结构 课程 xff1a 炼数成金GITHUBCSDN知乎欢迎点亮star span class token keyword import span tensorflow span c
  • Tensorflow代码学习-10-3验证码识别

    验证码识别 课程 xff1a 炼数成金GITHUBCSDN知乎欢迎点亮star span class token comment coding utf 8 span span class token keyword import span
  • 腾讯云ubuntu远程桌面

    1 首先要连接上你的服务器 xff0c 然后安装vncserver xff0c 这个是用来远程连接用的 命令如下 apt get install vnc4server 2 安装图形界面 apt get install xfce4如果安装不上
  • 如何快速上手期刊、会议论文latex的小技巧

    来自学习经验 xff0c 如有更好可评论告知 xff01 适用于各种期刊 会议的小技巧 xff01 xff01 可节省非常多时间 xff01 xff01 知乎专栏 简单描述如下 xff1a 1 找一篇与要投的期刊一篇论文 2 去arxiv网
  • 解决 树莓派自带的VNC版本不能进行文件传输

    在树莓派4B上使用的VNCSERVER是可以进行文件传输的 xff0c 就想应该是树莓派3B 43 上的操作系统自带的VNC版本太旧 xff0c 因此就想直接用命令sudo apt upgrade tightvncserver更新 xff0
  • Git submodule - Git子模块简介

    目录 建立仓库 1 1 创建主仓库 1 2 创建子仓库提交内容 2 1 提交到主工程的仓库 2 2 提交到子模块的仓库克隆带子模块的仓库到本地更新子仓库总结参考文档 正文 软件开发中有一个DRY Don t Repeat yourself
  • IR2101驱动

    下面是datasheet上的内部框图及应用电路 xff1a 由内部框图及输入输出时序图可知 xff1a HIN输入高则HO输出高 xff0c 输入低则输出低 低端也一样 由典型应用电路图分析 xff1a 当HIN LIN同时输入高 xff0
  • Cannot convert a symbolic Tensor to a numpy array错误的解决

    最近写代码的时候发生了一件奇怪的错误 NotImplementedError Cannot convert a symbolic Tensor bert encoder layer 0 attention self strided slic
  • ubuntu进入tty1、tty2等界面的操作

    想要进入tty1或者tty2 xff0c 需要ctrl 43 alt 43 f1 xff0c 注意如果是笔记本电脑 xff0c 需要输入ctrl 43 alt 43 fn 43 f1 xff0c 注意如果tty1界面进入不了的时候 xff0
  • 移植Mavlink协议到STM32F103详细教程

    环境配置 win10系统 43 STM32F103ZET6 步骤 参考MAVLINK官网 1 安装python3 6以上的版本 xff0c 我安装的是python3 8 Python3 8下载地址 详细安装步骤可参考 xff1a pytho
  • pid调试

    1 PID调试步骤 没有一种控制算法比PID 调节规律更有效 更方便的了 现在一些时髦点 的调节器基本源自PID 甚至可以这样说 xff1a PID 调节器是其它控制调节算法的吗 为什么PID应用如此广泛 又长久不衰 xff1f 因为PID
  • MAVLINK协议理解

    mavlink协议的载体是一下格式 xff1a 这是载体格式 这是载体的具体格式说明 mavlink的结构 主要有3部分 mavlink messages 比如 0 心跳包 这个message 就是各种数据帧里的数据 xff0c 例如 xf
  • 关于&0xFF的理解

    做协议解析时候 xff0c 一个byte的0xFE xff0c 直接转化int xff0c 应该是254 xff0c 但是最终结果是 2 xff0c 在网上一查 xff0c 有的人说是因为java用补码表示的byte 网址 xff1a ht
  • tensoflow2.x中tensor转numpy问题

    这里写自定义目录标题 AttributeError 39 Tensor 39 object has no attribute 39 numpy 39 AttributeError Tensor object has no attribute
  • A算法与A*算法区别

    A算法由 f n 61 g n 43 h n 俩个因素决定 xff0c g n 是这一步的代价函数 h n 是这一步的预估函数 xff1b 对于A 算法来说 xff0c 评判函数也是 f n 61 g n 43 h n 这个 xff0c 只

随机推荐

  • PARWAN处理器架构特点

    PARWAN处理器架构特点 PARWAN处理器结构图 xff08 搬运工系列 xff09 各个部分说明 xff1a Applied toCategtoriesSignal Name FunctionallyAC 累加计数器 Register
  • PX4源码学习一--Pix和APM的区别

    pixhawk是硬件平台 xff0c PX4是pixhawk的原生固件 xff0c 专门为pixhawk开发的 APM xff08 Ardupilot Mega xff09 也是硬件 Ardupilot是APM的固件 xff0c 所以称Ar
  • px4源码学习三--px4源码结构分析

    px4源码结构分析 Px4源码目录 cmake xff1a 是存放的 Cmake 编辑脚本文件夹 xff0c 其中 Cmake Configs 是存放的不同硬件的编译脚本 xff0c nuttx mindpx v2 default 是 PI
  • px4源码学习五--固定翼位置控制模块

    fw pos control模块 class landingslope 为固定翼着陆的角度变化模块 calulateSlopeValues void private 更新H1 H0 d1 根据log xff08 H0 H1 xff09 的比
  • px4源码学习六--uORB模块研究

    UORB模块研读 uORB函数解析 xff1a uORB模块 xff08 Micro Object Request Broker xff0c 微对象请求代理器 xff09 uORB是Pixhawk系统中关键的一个模块 xff0c 肩负了数据
  • Ubuntu开机进入busybox

    Ubuntu开机进入busybox 一般是因为ubuntu的文件系统出了问题 xff0c 所以需要在bushbox中进行扫描修复 看一下错误信息 xff0c 然后在busybox的命令行中运行fsck ext4 y dev sda1 xff
  • 关于JAVA文件都在没问题,没有错误提示波浪线,但编译时候提示找不到对应包的问题

    使用springboot做电商网站时候 修改了一点小功能 然后运行不了 提示XX XXX domain XX类找不到等一大堆类都找不到 但是对应包是存在的 而且在编辑框里没有红色的错误提示波浪线 所以 猜测应该不是代码的问题 又因为我们是g
  • c++泛型编程编译问题

    undefined reference to 模板类 c 43 43 泛型编程时候 xff0c 由于 h文件中放声明 xff0c cpp里放实现 xff0c main里调用 xff0c 编译时候 xff0c 就出现这样的问题 解决方法 xf
  • STM32CUBEMX的freertos一般使用方法笔记

    一 使用STM32CubeMX创建FreeRTOS操作系统 LED闪烁的配置 接下来配置时钟 xff0c 点击生成 此处为用户代码编写处 xff1b 开启这个选项便可以使用更加精确的延时 在代码区添加 便可以 xff01 二 任务挂起和取消
  • Qt5之QStatus状态栏

    1 一些常见用法 xff0c 来自其他优秀博文 xff1a https www cnblogs com toby zhang p 5729629 html 2 我这里添加状态了 xff0c 状态栏上放了一个QLabel控件显示时间 创建和添
  • 主函数一定要有while(1)吗?

    主函数一定要有while 1 吗 xff1f 在我两次移植例程时 xff0c 执行的结果都不对 xff0c 后来检查发现 xff0c 缺省了while 1 xff0c 加上之后结果就正确了 xff0c 这让我百思不得其解 xff0c 于是我
  • 解决error:legacy boot of uefi media

    错误 uefi媒体的传统引导 可能你的是GPT分区 xff0c 要改成UEFI引导 按F2 进入bios更换其他引导 xff0c 不同的品牌有自己进入的bios的方式 xff0c 我的是F2 按F10保存 解决
  • MongoDB安全实战之SSL协议加密

    邓开表同学实战MongoDB系列文章 xff0c 非常不错 xff0c 赞 xff01 大力推荐 xff01 本文主要讲述MongoDB的SSL协议加密的使用和配置的实战经验 xff0c 非常值得一看 前面系列文章 xff1a MongoD
  • 关于开源项目——C语言实现FTP服务器的结构解析

    项目地址 xff1a https github com beckysag ftp 针对此开源项目的说明 xff0c 结构分析 服务端整体框架 xff1a 1 从命令行输入得到服务端绑定端口号 2 设置套接口选项 xff0c 创建监听套接字
  • Nvidia Xavier NX 刷机 内置EMMC 带固态版

    Nvidia Xavier NX 刷机 内置EMMC 带固态版 前言一 烧录系统1 准备linux系统的电脑一台2 下载SDK Manager3 烧录过程 二 将NX系统迁移到NVME固态硬盘上1 格式化分区2 将EMMC SD卡的root
  • 关于vscode安装包下载太慢解决方法(详解)

    方法一 第一步 vscode官网选择下载版本 vscode官网 这里直接按系统选择合适的版本进行下载 xff01 第二步 进入下载界面 xff08 这一步别着急 xff0c 一定要进入下载过程 xff09 这里一定要点击保存 xff01 下
  • java 导出excel

    目录 一 动态下拉框二 合并行单元格三 复杂表头四 批量生成文件上传到文件服务器 xff0c 再从文件服务器批量下载压缩成压缩包后导出 一 动态下拉框 如何得到这样一张表格 xff1f 在单元格中插入可选下拉框 思路分析 xff1a exc
  • win10 H3C 映射外网端口,实现外网端口访问

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 目录 cmd 进入 控制台 登录H3C命令行控制台 xff0c 输入账号密码 查看dns网卡等基本信息 进入系统视图 映射 查看映射情况
  • VMware Workstation v16.2 + CentOS6.5命令行模式

    VMware下载地址和安装教程 CentOS官网下载 文章目录 一 VMware部分1 新建虚拟机2 选择驱动3 配置网络 xff08 NAT配置 xff09 二 CentOs部分1 安装驱动2 联网补充 xff1a 一 VMware部分
  • 并发编程(一)cpu,进程,线程,并发

    文章目录 一 程序和进程1 程序的进化论2 程序和进程的关系3 进程和线程的关系4 CPU和RAM的关联5 CPU 进程 线程之间的关系6 CPU如何执行 二 线程1 线程的使用2 线程的生命周期 三 并发和并行1 并发和并行2 高并发的定