【JavaEE】认识线程

目录

1、什么是线程

 2、为什么引入线程

2.1、线程的优缺点

3、CPU的工作原理 

 4、线程和进程的关系

 4.1、线程和进程的入口函数

4.2、线程独享的资源


1、什么是线程

一个进程中可以有一个或者多个线程,每个线程都是一个独立的执行流。多个线程之间,也是并发(并行+并发)执行的。

这里的多线程可能是在多个CPU核心上,同时运行,也可能是在一个CPU核心上,通过快速调度进行运行。在第一个JavaEE的博客中说到进程的调度,指的是这些进程里面只有一个线程。操作系统中真正调度的是线程,而不是进程。

  1. 线程是操作系统调度运行基本单位
  2. 进程是操作系统资源分配基本单位
  3. 线程之间共享进程资源。

 2、为什么引入线程

早在80年代,由于进程的创建和销毁以及切换存在较大空间的开销,因此人们急需一种轻型的进程技术来减少资源的开销,于是线程在这种背景之下产生了。

2.1、线程的优缺点

优点: 

  • 创建线程比创建进程更快
  • 销毁线程比销毁进程更快
  • 调度线程比调度进程更快
  • 创建一个进程,进程中的线程可以共享进程的资源,资源的开销减少。

缺点:

虽然说线程之间的调度开销小,但是由于多个线程共享同一个进程中的资源,如果一个线程崩溃了,那么有可能导致整个进程被抹杀。但是进程之间的调度不存在这个问题,每个进程都是独立的空间,都有独立的资源,一个进程崩溃不会影响到其他进程的运行。

3、CPU的工作原理 

要了解线程和进程之前我们还要了解一下一段代码在CPU中执行过程。

  • CPU只知道两件事,1、从内存中读取指令,2、执行指令,执行完成之后,回到1.
  • 注意这里计算器为了提高效率,CPU中存在寄存器,读取数据的时候他会从PC寄存器(Program Counter Register)中读取数据存放在内存中的地址。PC寄存器也就是程序计数器。程序计数器有寄存信息和计数两种功能结构。
  • 我们写的代码通过编译器生成可执行文件(01代码),存放在磁盘中,内存中的指令是通过加载磁盘中的可执行文件形成的。 

 

 计算机在执行这些指令的时候,只需要找到函数被编译之后的第一条指令就可以了,这就是入口函数。

 4、线程和进程的关系

 4.1、线程和进程的入口函数

进程的入口函数就是main方法, 线程诞生之前进程中就只有一个执行流。线程诞生之后进程之中会存在多个线程。这个时候每个线程就需要自己的入口函数。

 把CPU的PC寄存器指向线程的入口函数,这样线程就可以运行起来了,这就是为什么我们创建线程时必须指定一个入口函数的原因.

4.2、线程独享的资源

函数在别执行的时候产生的数据包括函数参数、局部变量、返回地址等信息,这些信息是保存在栈中的。操作系统要为每个线程在进程的地址空间中分配一个栈,即每个线程都有独属于自己的栈。

线程运行的本质其实就是函数的执行,函数的执行总有一个源头,这个源头就是所谓的入口函数。cpu从入口函数开始执行从而形成一个执行流。这个执行流就是线程。 

  •  CPU执行指令的信息保存在程序计数器中,通过这个寄存器计算机就可以知道接下来执行那一条指令。由于多线程可以是并发进行的,所以一个线程在执行一段之后,可能会被停止,因此程序计数器需要保存下这个线程被执行都那个地方的信息,以便于下次要继续执行这个线程的时候,知道从哪里开始。
  • 同时函数运行时需要额外的寄存器来保存一些信息,像部分局部变量之类。这些寄存器也是线程私有的,一个线程不可能访问到另一个线程的这类寄存器信息。
  • 💥💥从上面的讨论中我们知道,到目前为止,所属线程的栈区、程序计数器、栈指针以及函数运行使用的寄存器是线程私有的。
  • 以上这些信息有一个统一的名字,就是线程上下文(throead context)

 除此之外,剩下的都是线程间共享资源。

❗❗❗总结线程的私有资源 

具体来说,线程的私有资源有以下这些

  1. 线程ID:每个线程都有字节唯一的ID,用于区分不同的线程
  2. 寄存器组的值:当线程切换时,必须将原有的线程的寄存器集合的状态保存,以便重新切换时得以恢复。
  3. 线程的堆栈:堆栈是保证线程独立运行所必须的
  4. 错误返回码:由于同一进程中有很多线程同时运行,可能某个线程进行系统调用后设置了error值,而在该线程还没有处理这个错误,另一个线程就在此时被调度器投入运行,这样错误值就有可能别修改。所以,不同的线程应该拥有自己的错误返回码变量。
  5. 线程优先级:线程调度的次序(并不是优先级大的一定先执行,优先级大只是最先执行的机会大。线程的优先级就像个CPU提一个建议的左右,采不采用有CPU决定)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/17495.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3.rabbitMQ之发布确认高级和整合springboot(重要)找了很多博客整理出来的

1.极端情况下 rabbitMQ需要重启,导致消息投递失败(生产者发消息全部丢失)(交换机或者队列出问题) 生产者需要把数据放到缓存,用定时任务重新发送 解决方法: 0.必须配置文件写 spring.rabbitmq.publisher-confirm-typecorrelatedspring.rabbitmq.publisher-returnstruecorrelati…

Word Embedding

One-hot-encoding 缺点 1.向量维度和向量个数很大,假设有1w个token的话,向量个数和维度就都是1w 2. 语义相近的词的向量并不相似 Word Embedding 核心思想:可以通过上下文理解单词的语义 predection-based方法 使用前一个单词预测下一个…

【机器学习】信息量、香农熵、信息增益

这节可以搭配 【机器学习】Logistic回归(重新整理)信息量(信息)信息量公式的推理过程 香农熵信息增益 【机器学习】Logistic回归(重新整理) B站视频:“交叉熵”如何做损失函数?打包…

Linux一学就会——编写自己的shell

编写自己的shell 进程程序替换 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数 以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动 例程开始执行…

视觉震撼的数据可视化示例

众所周知,数据可以非常强大——当你真正理解它告诉你什么时。 数据和信息可视化(数据可视化或信息可视化)是对大量复杂的定量、定性数据、信息进行设计和创建易于沟通、易于理解的图形或视觉表示的实践,在静态、动态或交互式视觉项目的帮助下&#xff0…

存储网络架构——DAS、NAS、SAN、分布式组网架构

目录 DAS直连式存储 NAS网络附加存储 SAN存储 存储区域网络 分布式存储组网 DAS直连式存储 DAS遇到的挑战 NAS网络附加存储 向主机提供文件服务;文件系统由存储设备维护,用户访问文件系统,不直接访问底层存储 拥有所有主机上文件与底层存储空…

JS案例分析-某国际音x-tt-params参数分析

今天我们要分析的网站是:https://www.tiktok.com/selenagomez?langen,参数名字叫x-tt-params。 先来抓个包 这个接口是用户视频列表url,参数叫x-tt-params,该接口中还有其他参数像msToken,X-Bogus, _sig…

【51单片机】点亮一个LED灯(看开发板原理图十分重要)

🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【The Right Path】 🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🍔基础内容 &#x1f3f3…

项目集的定义及管理

一、什么是项目集 项目集是相互关联且被协调管理的项目、子项目集和项目集活动,以便获得分别管理所无法获 得的效益。 以项目集的形式管理项目、子项目集及项目集活动能确保项目集组件的战略和工作计划根据各组 件的成果做出相应调整,或者按照发起组织的…

洞车系统常见问题解决指南

洞车常见问题解决指南 1.研发脚本处理问题1.1 WMS出库单无法审核1.2 OMS入库单无法提交,提示更新中心库存失败1.3 当出现OMS下发成功WMS/TMS/DMS还没有任务的情况时处理方案1.4 调度波次生成或者添加任务系统异常1.5 东鹏出库单部分出库回传之后要求重传1.6 更新订单…

不会前端,怎么快速打造属于自己的个人博客?

个人博客 简介提前准备 一、初始化vuepress项目二、页面配置首页配置顶部配置顶部导航栏路由配置侧边导航栏配置 三、打包部署四、数据统计插槽自定义插槽配置整体结构页面效果 项目地址 简介 主要教大家如何快速搞一个属于自己的博客网站,特别是一些不怎么会前端的…

信息安全保障

文章目录 信息安全保障基础基本概念信息安全定义广义和狭义的信息安全问题信息安全问题的根源和特征情报威胁和态势感知信息安全保障基础信息安全属性信息安全视角 信息安全发展阶段通信安全计算机安全信息系统安全信息安全保障网络安全空间 信息安全保障新领域工业控制系统(IS…

【虹科案例】使用 TCP 分析测量握手时间

如何使用 Allegro Network 万用表的 TCP 分析确定握手时间 握手需要多少时间? 在图 1 中,您可以在虹科Allegro 网络万用表的 TCP 统计数据中看到过去 10 分钟的客户端握手次数。在这里,您可以清楚地看到在指定时间段内有延长的响应时间。但…

ChatGPT探索系列之五:讨论人工智能伦理问题及ChatGPT的责任

文章目录 前言一、安全二、隐私和道德三、我们应该做什么总结 前言 ChatGPT发展到目前,其实网上已经有大量资料了,博主做个收口,会出一个ChatGPT探索系列的文章,帮助大家深入了解ChatGPT的。整个系列文章会按照一下目标来完成&am…

给定一个文本文件,每行是一条股票信息,写程序提取出所有的股票代码

问题:给定一个文本文件,每行是一条股票信息,写程序提取出所有的股票代码。其中,股票代码规则是:6 位数字, 而且以.SH 或者.SZ 结尾。 文件内容示例: 2020-08-08;平安银行(000001.SZ);15.55;2940…

如何用ChatGPT做品牌联名方案策划?

该场景对应的关键词库(15个): 品牌、个人IP、社交话题、联名策划方案、调研分析、市场影响力、资源互补性、产品体验、传播话题、视觉形象设计、合作职权分配、销售转化、曝光目标、宣发渠道、品牌形象 提问模板(1个)…

kubernetes项目部署

目录 ​一、容器交付流程 二、k8s平台部署项目流程 三、在K8s平台部署项目 一、容器交付流程 容器交付流程通常分为四个阶:开发阶段、持续集成阶段、应用部署阶段和运维阶段。 开发阶段:开发应用程序,编写Dockerfile; 持续集成阶段&#…

很佩服的一个Google大佬,离职了。。

这两天,科技圈又有一个突发的爆款新闻相信不少同学都已经看到了。 那就是75岁的计算机科学家Geoffrey Hinton从谷歌离职了,从而引起了科技界的广泛关注和讨论。 而Hinton自己也证实了这一消息。 提到Geoffrey Hinton这个名字,对于一些了解过…

Spring Cloud学习笔记【分布式配置中心-Config】

文章目录 SpringCloud Config概述概述传统方式弊端主要功能与GitHub整合配置 Config服务端配置与测试服务端配置(即Gitee上的配置文件)Config Demo配置Spring Cloud Config访问规则 Config客户端配置与测试bootstrap.yml说明Config客户端 Demo配置 SpringCloud Config概述 概述…

无需公网IP 使用SSH远程连接Linux CentOS服务器【内网穿透】

文章目录 视频教程1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下,SSH远程连接家里/公司的Linux CentOS服务器,无需公网IP,也不需要设置…