多线程(一):通俗易懂的理解线程和进程

2023-11-10

目录

计算机常识

什么是程序?

什么是进程?

什么是线程?

如果理解线程切换?

程序和CPU的常识

线程切换过程

普及几个线程面试题,和以上说过的知识相关

1.单核CPU设定多线程是否有意义?

2.工作线程数是不是设置越大越好?

3.工作线程数(线程池中的线程数量)设定多少合适?


计算机常识

计算机中有两大重要的组件,cpu和内存,这两个是我们平时执行程序最经常用的

什么是程序?

比如说QQ.exe,就是一个windows下一个很普通的运行程序。

那么我们怎么执行它呢?双击执行。

那双击执行会发生什么操作呢?由我们的操作系统找到它,找到它之后把他相关的信息load(加载)到内存中,这时候在内存中就有一个运行的QQ.exe

什么是进程?

通俗解释:内存中的每一个正在执行的文件,都是一个进程。操作系统会给每一个进程分配很多资源,比如说内存空间,文件描述符,IO的端口号等等

官方解释:操作系统进行资源分配的基本单位。

什么是线程?

通俗解释:一个程序里面不同的执行路径,就叫做一个线程。

比如说main方法,程序都是从main方法一条线往下顺序执行的,它是一条路径。如果在执行的过程中又分出其他的执行路径同时执行,那就是多线程。main方法所开启的线程称为主线程。

站在底层角度解释:QQ.exe是一个程序,把这个程序放到内存中是一个进程,怎么开始执行这个进程呢?真正开始执行的时候是操作系统以线程为最小单位开始执行的。操作系统找到我们的主线程(main方法),扔给cpu去执行,主线程如果中间开启了其他线程,就会产生线程之间的来回切换。

总结:线程是调度执行的基本单位。多个线程共享一个进程的资源,就会出现很多麻烦事。

如果理解线程切换?

程序和CPU的常识

程序有指令、数据。

CPU有几个重要的组成单元:

ALU计算单元

寄存器(registers):用来存储数据的

pc(program counter)程序计数器,也是一种寄存器,用来存储下一条指令的地址,说白了就是存储该执行哪条指令的。

所以执行一个线程的时候,指令放到pc程序计数器里,数据放到寄存器(registers)中。

线程切换过程

比如说现在有两个线程:T1、T2,执行T1的时候把T1的指令和数据放到cpu中,然后ALU计算单元对他进行计算,计算好了之后该做什么操作做什么操作。

假如说操作系统的调度算法发现T1已经执行到他该执行的时间了,把T1线程的指令和数据缓存起来(可以理解为放到内存中缓存起来),再把T2的指令和数据放到cpu中去执行,完成线程之间的来回切换。

如果这时候T2执行时间到了,该T1执行了,把T2放到缓存中去,把T1从缓存中拿出来放到CPU中就可以了。

中间需要操作系统的调度功能,这个过程也是消耗性能的。CPU其实很傻,它只管计算,其他什么都不管。

普及几个线程面试题,和以上说过的知识相关

1.单核CPU设定多线程是否有意义?

有意义,比如说主线在在做等待接受数据或者Sleep这种操作,处于一种阻塞状态,这时候他是不消耗CPU的,可以切换到别的线程来做别的事情,充分压榨CPU资源,提高CPU利用率。

2.工作线程数是不是设置越大越好?

前面说过,线程之间来回切换也是消耗资源的,比如说有4个CPU,1w个线程,那就完蛋了,CPU资源全部都消耗在线程之间来回切换了,所以并不是越大越好

3.工作线程数(线程池中的线程数量)设定多少合适?

 上图来源于《java并发编程实践》,上图中写的很详细,接着上图说,我怎么知道W/C的时间呢?这个是需要把项目部署到服务器上之后,做一些统计才可以知道的,这样是比较科学的。当然可以利用profiler压测工具压测来看W/C的时间。

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

多线程(一):通俗易懂的理解线程和进程 的相关文章

随机推荐

  • 初步了解python与爬虫

    初步了解 python与爬虫 1 什么是python 答 python是一种动态的 面向对象的计算机程序语言 像C java C 一样 它的特点就是语法简洁 具有丰富的 功能强大的第三方库函数 2 什么是爬虫 答 爬虫即Web Spider
  • 移动通信原理B-------例题解答2

    移动通信原理B例题解答2 移动通信原理B 例题解答2 一 题目 若一发射机发射载频为1850Mhz 一辆汽车以每小时72Km h的速度运动 计算在以下情况下接收机的载波频率 1 汽车沿直线朝向发射机运动 2 汽车沿直线背向发射机运动 3 汽
  • linux服务器基础知识,linux基础知识1

    1 在chmod 命令中 v参数的作用是 A 详细说明组的变化 B 详细说明权限的变化 C 改变本目录及其所有子目录的文件的权限 D 在文件的权限确实改变时进行详细的说明 2 为了显示文件 test 的内容可以用命令 A cat test
  • jQuery 事件 - trigger() 方法

    实例
  • SCADA和三大工业控制系统PLC、DCS、FCS

    一 引言 工业控制系统 ICS 是一个通用术语 随着工业技术的快速发展 相继出现了集散控制系统和现场控制系统 涵盖多种类型的控制系统 包括监控和数据采集 SCADA 系统 分布式控制系统 DCS 和其他较小的控制系统配置 如经常在工业部门和
  • 剑指Offer-链表-面试题62:圆圈中最后剩下的数字

    面试题62 圆圈中最后剩下的数字 题目描述 每年六一儿童节 牛客都会准备一些小礼物去看望孤儿院的小朋友 今年亦是如此 HF作为牛客的资深元老 自然也准备了一些小游戏 其中 有个游戏是这样的 首先 让小朋友们围成一个大圈 然后 他随机指定一个
  • 基本操作:vscode-git使用和命令

    1 Git简介 GIt git 是一个开源的分布式版本控制系统 可以有效 高速的处理从很小到很大的项目版本管理 通俗的说 解决的问题是 正常开发 一个团队需要很多人来共同开发一个项目 那么就涉及到代码的合并 比如两个人 同时更改了一处代码
  • Python爬取拉勾网职位 - 分析学历与薪资关系及技能词云

    Python拉勾网职位爬取及数据分析可视化 文章目录 Python拉勾网职位爬取及数据分析可视化 1 工具准备 1 安装第三方库 2 安装及配置Chromedriver无头浏览器 3 谷歌浏览器xpath插件安装及配置 4 使用Pychar
  • 焊接机器人的坡口填充功能_《金属焊接》课后习题参考答案完整版

    金属焊接 课后习题 第1章绪论 1 1 什么是焊接 什么叫做焊接技术 储运11 1 01 丛欣欣 答 焊接 是指通过适当的手段 是两个分离的金属物体 同种金属或异种金属 产生原子 分子 间结合而连接一体的连接方法 焊接技术 焊接是一种重要的
  • HTML期末作业-网上书城网上书店

    HTML期末作业 网上书城网上书店 HTML css JavaScript 7个页面 部分源码
  • 史上最强,Jenkins插件实现多个Job并行后再触发Job详细,一篇贯通...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • 【面试】数据仓库面试经验总结

    目录 第一部分 自我介绍 第二部分 专业知识细问 第三部分 数据治理 第四部分 开发 代码能力 第五部分 个人性格测试 第一部分 自我介绍 通常面试官会让进行自我介绍 加项目经历介绍 大多数会按简历上的内容逐条细问 回答的时候尽量根据STA
  • VMWare15.5安装CentOS7.9

    一 创建虚拟机 创建虚拟机 选择自定义 高级 点击下一步 选择默认 点击下一步 选择 稍后安装操作系统 点击下一步 选择要安装的操作系统和版本 点击下一步 修改虚拟机名称和安装路径 点击下一步 根据需要设置处理器数量和内核数量 点击下一步
  • 006.设计原则与思想:规范与重构

    规范与重构 一 理论一 什么情况下要重构 到底重构什么 又该如何重构 1 重构的目的 为什么要重构 why 2 重构的对象 到底重构什么 what 3 重构的时机 什么时候重构 when 4 重构的方法 又该如何重构 how 二 理论二 为
  • elasticsearch-分词测试

    分词结果 tokens token 今天天气 start offset 0 end offset 4 type CN WORD position 0 token 今天 start offset 0 end offset 2 type CN
  • Android架构——ViewModel原理学习总结

    本文是楼主学习ViewModel 源码的一些总结 感觉ViewModel的源码是Android 三大架构中 最容易理解的一个了 本文ViewModel基于版本androidx lifecycle lifecycle viewmodel 2
  • Java - 表达数值的字符串(剑指offer)

    请实现一个函数用来判断字符串是否表示数值 包括整数和小数 例如 字符串 100 5e2 123 3 1416 和 1E 16 都表示数值 但是 12e 1a3 14 1 2 3 5 和 12e 4 3 都不是 剑指offer public
  • 100个Python小游戏,上班摸鱼我能玩一整年【附源码】

    哈喽铁子们 表弟最近在学Python 总是跟我抱怨很枯燥无味 其实 他有没有认真想过 可能是自己学习姿势不对 比方说 可以通过打游戏来学编程 今天给大家分享100个Python小游戏 一定要收藏 相关文件代码已上传 文末扫一下名片备注 游戏
  • Kettle实例-缺失值处理-去除缺失值

    1 通过使用Kettle工具 创建一个转换delete missing value 并添加 文本文件输入 控件 字段选择 控件 过滤记录 控件 Excel输出 控件 空操作 什么也不做 控件以及Hop跳连接线 2 单击 浏览 按钮 选择要去
  • 多线程(一):通俗易懂的理解线程和进程

    目录 计算机常识 什么是程序 什么是进程 什么是线程 如果理解线程切换 程序和CPU的常识 线程切换过程 普及几个线程面试题 和以上说过的知识相关 1 单核CPU设定多线程是否有意义 2 工作线程数是不是设置越大越好 3 工作线程数 线程池