JavaEE 多线程01

为什么引入多线程?

首先进程已经能很好的完成多任务这个情景下的并发编程了,那为什么又引入多线程呢?

这是因为在一些情景下,我么需要大量的创建和销毁进程来完成一些任务,此时多进程对系统的开销就会很大了.

假设有这样一个场景,服务器同时接收到很多个服务请求,这个时候服务器就会创建多个进程来处理这些请求,处理完成之后就要摧毁这个请求,这个时候就需要大量的创建和销毁对应的进程了,这样对服务器的cpu,硬盘,内存,带宽都会造成很多的占用.这个时候多进程表现的就不尽人意了.

这个时候我们就引入了多线程,你可以理解线程为一种轻量级的进程,线程在能完成以上情景之外,减小了创建的开销,保持了独立调度的特性,这样在支持并发的同时,减去了创建和销毁的开销!

注:线程是系统调度的基本单位,进程是系统分配资源的基本单位.

那么,线程是怎么做到这一点的呢?

线程的创建开销 

线程和进程的描述一样是使用一个pcb来描述的,一个进程其实有多个pcb,这就是一个线程组,这里的线程在内存指针和文件操作符表等上是共用一个空间的,只有在其他的pid等是不同的,由于文件指针相同,所以只有在第一个线程的创建的时候是需要内存开销的,其他的时候都开销非常小,你可以理解为只有创建第一个线程的时候从系统分配资源,后续都直接使用之前分配好的资源即可.也不是随便两个线程都是"共享空间的",只有线程组内的线程才共享一个空间,而这个线程组可以理解为是进程的一部分.

进程和线程的区别

这是一个经典的问题,我们来讨论一下

1.每个进程有自己的资源,进程之间相互不影响,而线程之间有一些资源是共享的,比如文件描述符表和内存指针等.进程是cpu分配资源的基本单位,线程是cpu调度的基本单位.

2.进程之间相互独立运行,线程之间可能相互影响,可能一个线的崩溃导致一系列线程的异常终止

3.同一个进程中的线程可能相互干扰导致线程安全问题.

4.线程不是越多越好的,当线程超过十个之后对性能的提升就不明显了,调度开销可能就会越发明显

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础教程: sorted 函数

嗨喽,大家好呀~这里是爱看美女的茜茜呐 sorted 可以对所有可迭代的对象进行排序操作, sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。 从新排序列表。 👇 👇 👇 更多精彩机密、教程…

taro h5 ios解决input不能自动获取焦点拉起键盘

描述:页面中有个按钮,点击跳转到第二个页面(有input),能直接获取焦点拉起键盘输入 安卓: 直接用focus() ios: focus无效,必须手动拉起 原理: 点击按钮的时候拉起一…

一元三次方程求解——浮点数二分

题目描述 思路 根与根之差的绝对值>1。可以得出距离为1的区间最多只有一个根若存在2个数x1和x2&#xff0c;且x1 < x2&#xff0c;f(x1) x f(x2) < 0&#xff0c;则(x1, x2)之间一定有一个根我们可以遍历每一个区间为1的范围&#xff0c;先判断左端点是否是根&#x…

K8s client go 创建CRD的informer

背景 需要监听K8s中CRD资源的变动, 做出相应的处理, 需要针对 CRD资源建立informer 实现 dynamicClient 是 创建的K8s的client, 这里使用的是 Unstructured 接収的CRD的结果, 加工的时候使用了convertUnstructuredProject 加工了一下, convertUnstructuredProject 实现下面提…

如何进行网络通信和套接字编程?

网络通信和套接字编程 引言 网络通信是计算机科学中的重要概念&#xff0c;它使得不同计算机之间可以进行数据交换和信息传递。套接字编程是一种实现网络通信的方法&#xff0c;它提供了一套标准的接口&#xff0c;使得应用程序可以通过网络进行数据传输。本文将详细介绍网络…

Python---global关键字---设置全局变量

global 英 /ˈɡləʊb(ə)l/ adj. 全球的&#xff0c;全世界的&#xff1b;全面的&#xff0c;整体的&#xff1b;&#xff08;计算机&#xff09;全局的&#xff1b;球形的 需求&#xff1a;如果有一个数据&#xff0c;在函数A和函数B中都要使用&#xff0c;该怎么办&…

【PyGIS】使用阿里AIEarth快速下载指定区域指定年份的土地利用数据

说明 中国逐年土地覆盖数据集(CLCD) 由武汉大学的杨杰和黄昕教授团队基于Landsat影像制作了中国逐年土地覆盖数据集(annual China Land Cover Dataset, CLCD),数据包含1985—2021年中国逐年土地覆盖信息。研究团队基于Landsat长时序卫星观测数据,构建时空特征,结合随机森…

Linux常用命令——blockdev命令

在线Linux命令查询工具 blockdev 从命令行调用区块设备控制程序 补充说明 blockdev命令在命令调用“ioxtls”函数&#xff0c;以实现对设备的控制。 语法 blockdev(选项)(参数)选项 -V&#xff1a;打印版本号并退出&#xff1b; -q&#xff1a;安静模式&#xff1b; -v&…

蓝桥杯官网填空题(重合次数)

问题描述 在同一天中, 从上午 6 点 13 分 22 秒到下午 14 点 36 分 20 秒, 钟表上的 分针和秒针一共重合了多少次? 注意时针、分针、秒针都围绕中心敳匀速运动。 答案提交 这是一道结果填空的题&#xff0c;你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案…

【正则插件】前端正则插件以及预览插件推荐

1&#xff09; 2&#xff09; any-rule Pegex Previewer 下载好插件之后 在代码层右键选择 选择你需要的正则表达式&#xff0c;随后可以使用第二个插件 正则表达式插入之后顶部会有 Test Regex.. 点击会出现以下内容 将他 ctrl a 删除&#xff0c;输入你对应的正则表达…

@Validated注解的作用代码示例

当使用Spring框架进行参数验证时&#xff0c;可以通过Validated注解来触发参数验证。以下是一个简单的示例&#xff0c;演示了如何在Spring控制器中使用Validated注解来验证请求的参数&#xff1a; 首先&#xff0c;假设有一个简单的User类作为请求的数据模型&#xff1a; pu…

电脑序列号查询

电脑序列号是厂商给每台电脑分配的一个产品识别码&#xff0c;也称为S/N&#xff08;Serial Number&#xff09;。主要用来查询电脑的出厂日期、保修状态、生产产地、产品配置等信息。电脑序列号查询有以下几种方法&#xff1a; 1、电脑机箱外壳&#xff1b; 2、系统信息/命令…

前端下载文件链接

前端下载文件链接 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </hea…

CSS 文字溢出:ellipsis在IE上不起效果

单行文本的溢出显示省略号 p {overflow: hidden;text-overflow: ellipsis;white-space: nowrap; }多行文本的溢出显示省略号 方法一&#xff1a; p {display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;overflow: hidden;text-overflow: ellipsis; }…

梁培强:塑造下一代投资高手

在当前全球经济动荡和金融市场快速变化的背景下&#xff0c;梁培强的投资教育计划不仅仅是一套课程&#xff0c;它是对传统投资理念的深度挑战和革新。梁培强&#xff0c;拥有超过二十年金融行业经验的资深分析师&#xff0c;正在引领一场投资者教育的变革&#xff0c;旨在培养…

C++中的Makefile是什么, 如何使用

Makefile简介 Makefile是一种用于构建C/C程序的文件&#xff0c;其中包含了项目中所有源文件、头文件以及编译器和链接器指令。使用Makefile可以使编译和链接成为一个自动化的过程&#xff0c;这样就可以方便地管理复杂的项目。 以下是一个简单的Makefile示例&#xff1a; C…

Centos 7 安装yum(针对python卸载yum出错)

提前下载所需安装包&#xff0c;按照下面顺序安装即可完成&#xff0c;每个依赖包必须正确安装 下载地址&#xff1a;http://mirrors.163.com/centos/7/os/x86_64/Packages/ rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps ##强制删除已安装程序及其关联 whereis …

基于SSM+Vue的社区共享食堂管理系统

基于SSM的社区共享食堂管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 菜品详情 管理员界面 摘要 社区共享食堂管理系统是一种基于SSM&#xf…

CentOS 7实现类似于Kali Linux中的自动补全功能

在CentOS 7中&#xff0c;可以通过安装和使用Bash-completion来实现自动补全功能&#xff0c;类似于Kali Linux中的自动补全。以下是安装和使用Bash-completion的步骤&#xff1a; 首先&#xff0c;确保您的系统已更新并安装了EPEL存储库。&#xff08;非必要&#xff0c;直接…

实现数据全字段搜索

代码 按钮 <el-button type"text" style"position: absolute;top:-48px;right:260px;z-index: 99;color: #000;"click"handleButtonClick(搜索), showConfirmationModal2()" :class"{ blue-text: activeButton 搜索 }"><im…