【Java|多线程与高并发】进程与线程的区别与联系
文章目录
- 什么是进程
- 什么是线程
- 上下文切换
- 多线程一定比串行执行快吗
- 进程与线程的区别与联系
什么是进程
进程的定义:进程是正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说CPU(寄存器),IO,内存,网络资源等。
但这些定义十分抽象,可以打开任务管理器来查看进程

操作系统中的一个exe程序就可以认为是进程
什么是线程
线程的定义:线程是指进程中的一个执行流程,一个进程中可以运行多个线程。
线程可以理解为进程执行中的一些子任务,这些线程各自执行一些任务,才构成了一个完整的exe程序(进程).
因此 先有进程,后有线程,进程中可以创建多个线程,至少有一个线程,但不能没有线程
进程负责向操作系统申请资源,在一个进程中,多个线程共享相同的内存和文件资源.
上下文切换
即使是单核处理器也支持多线程执行代码,进行并发编程时,CPU会不断地切换线程执行.但是切换的时间很快,因此我们是感知不到线程是切换的
CPU通过时间分配算法来循环执行任务,当执行一段时间后切换到另一个任务.在切换之前,需要保存上一个任务执行的状态,以便下次切换回来的时候,再加载这个任务的状态,可以接着上次切换前的状态继续往下运行,任务从保存到再加载的过程就是一次上下文切换
减少上下文的方法有:无锁并发编程 CAS算法 使用最少线程和使用协程
多线程一定比串行执行快吗
通过以下简单的示例即可验证:
public class Example3 {private static final long count = 10000001;public static void main(String[] args) {concurrency();serial();}private static void concurrency(){long start = System.currentTimeMillis();// 记录程序开始运行的时间Thread thread = new Thread(()->{int a = 0;for (long i = 0; i < count; i++) {a++;}});thread.start();int b = 0;for (long i = 0; i < count; i++) {b++;}try {thread.join();// 等待线程结束} catch (InterruptedException e) {throw new RuntimeException(e);}long end = System.currentTimeMillis();// 记录结束时间System.out.println(end-start);}private static void serial(){long start = System.currentTimeMillis();int a = 0;for (long i = 0; i < count; i++) {a++;}int b = 0;for (long i = 0; i < count; i++) {b++;}long end = System.currentTimeMillis();System.out.println(end-start);}
}
通过改变count的值,来观察它们运行时间的差距即可
因此很容易得出结论: 多线程不一定比串行执行快 只有当数据量足够多时,多线程才比串行执行快
这是因为线程在创建以及进行上下文交换时有一定的开销.
进程与线程的区别与联系
- 在启动线程时,只有第一个线程的开销比较大,后面的开销就很小了
- 在不支持线程的操作系统中,进程既是资源分配的基本单位,也是调度的基本单位;在拥有线程的操作系统中,线程是调度的基本单位,而进程是资源分配的基本单位。
- 进程虽然是独立的,但它们之间可以相互通信
- 线程在进程中,属于子集关系
- 虽然线程很轻,但是线程之间的上下文切换时间成本很高
相关文章:
【Java|多线程与高并发】进程与线程的区别与联系
文章目录什么是进程什么是线程上下文切换多线程一定比串行执行快吗进程与线程的区别与联系什么是进程 进程的定义:进程是正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说CPU(寄存器),IO,内存&a…...
K8s手工创建kubeconfig
我们通过 kubectl 命令行连接 k8s apiserver 时需要依赖 kubeconfig 文件。 kubeconfig 文件通常包含了 context(上下文)列表,每个 context 又会引用 cluster 和 user,最后通过 current-context 指定当前 kubeconfig 使用哪个 con…...
【SQL开发实战技巧】系列(十七):时间类型操作(下):确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数
系列文章目录 【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧…...
代码随想录算法训练营第二十八天 | 491.递增子序列,46.全排列,47.全排列 II
一、参考资料递增子序列题目链接/文章讲解:https://programmercarl.com/0491.%E9%80%92%E5%A2%9E%E5%AD%90%E5%BA%8F%E5%88%97.html 视频讲解:https://www.bilibili.com/video/BV1EG4y1h78v 全排列题目链接/文章讲解:https://programmercarl.…...
使用 Three.js 后处理的粗略铅笔画效果
本文使用Three.js的后处理创建粗略的铅笔画效果。我们将完成创建自定义后处理渲染通道、在 WebGL中实现边缘检测、将法线缓冲区重新渲染到渲染目标以及使用生成和导入的纹理调整最终结果的步骤。翻译自Codrops,有改动。 Three.js 中的后处理 Three.js中的后处理是一…...
推荐一些不常见的搜索引擎
5.雅虎网来自 Yahoo.com 的屏幕截图,2023 年 2 月截至 2022 年 1 月,Yahoo.com(Verizon Media)的搜索市场份额为 11.2%。雅虎的优势在于多元化,除搜索外还提供电子邮件、新闻、金融等服务。二十多年来,雅虎…...
RabbitMQ工作模式
目录1.Work queues工作队列模式1.1 模式说明1.2 代码1.3 测试1.4 小结2.订阅模式类型3.Publish/Subscribe发布与订阅模式3.1 模式说明3.2 代码3.3 测试3.4 小结4.Routing路由模式4.1 模式说明4.2 代码4.3 测试4.4 小结5.Topics通配符模式5.1 模式说明5.2 代码5.3 测试5.4 小结6…...
机器学习在预测脊髓型颈椎病中的应用:一项28名参与者的事后初步研究
机器学习在预测脊髓型颈椎病中的应用:一项28名参与者的事后初步研究 Machine Learning for the Prediction of Cervical Spondylotic Myelopathy: A Post Hoc Pilot Study of 28 Participants 简单说:训练了两个模型:1)预测脊髓型颈椎病诊断࿰…...
【智能计算数学】微积分
高数问题解决流程引例:回归回归引例:分类分类线性可分FLD线性不可分智能计算讨论范围下降法为什么要用下降法?- 解析解很难写出公式或很复杂难计算有哪些常用的下降法?- 梯度下降&高斯-牛顿法梯度下降(Gradient De…...
win10+RTX4070ti+libtorch部署
环境cuda 11.7、cudnn8.6.0、libtorch1.13.1cu117 注意: 1)libtorch官网进不去的可直接下载 Release version https://download.pytorch.org/libtorch/cu117/libtorch-win-shared-with-deps-1.13.1%2Bcu117.zip Debug version https://download.pytorch.…...
【Python百日进阶-Web开发-Vue3】Day518 - Vue+ts后台项目5:用户列表
文章目录 一、获取用户列表的数据1.1 定义用户列表和角色列表的接口src/request/api.ts1.2 获取用户列表数据src/views/UserView.vue二、定义用户列表数据类型2.1 src/type/user.ts三、展示用户列表内容3.1 element-plus中的Select 选择器3.2 element-plus中的表格插槽3.3 展示…...
Linux内核转储---kdump原理梳理
文章目录Kexec和Kdump设计的区别kexeckdumpKdump的执行流程kexec的实现用户空间kexec内核空间vmcoreKdump的实现可以分为两部分:内核和用户工具。内核提供机制,用户工具在这些机制上实现各种转储策略,内核机制对用户工具的接口是一个系统调用…...
【C++】从0到1入门C++编程学习笔记 - 实战篇:演讲比赛流程管理系统
文章目录一、演讲比赛程序需求1.1 比赛规则1.2 程序功能1.3 程序效果图:二、项目创建2.1 创建项目2.2 添加文件三、创建管理类3.1创建文件3.2 头文件实现3.3 源文件实现四、菜单功能4.1 添加成员函数4.2 菜单功能实现4.3 测试菜单功能五、退出功能5.1 提供功能接口5…...
04 OpenCV位平面分解
1 基本概念 位平面分解的核心思想是将图像的每一个像素分解为多个二进制位,分别存储在不同的位平面上。例如,如果一个图像是8位深度的,则可以分解为8个位平面,每个位平面上存储一个二进制位。 位平面分解在图像压缩中有着重要的…...
Onvif协议如何判断摄像机支持 —— 筑梦之路
有人就问什么是Onvif协议呢? 全称为:Open Network Video Interface Forum.缩写成Onvif。 翻译过来是:开放型网络视频接口论坛,目的是确保不同安防厂商的视频产品能够具有互通性,这样对整体安防行业才是良性发展。 现…...
情人节new一个对象给你
今天情人节,有没对象的吗?假设你不知道new怎么用,每个人都有两种身份,一种没对象的人,这个时候new一个对象给你,一种是有对象的人,这个delete对象。等你学完这个new和delete知识点,无…...
linux篇【15】:应用层-网络https协议
目录 一.HTTPS介绍 1.HTTPS 定义 2.HTTP与HTTPS (1)端口不同,是两套服务 (2)HTTP效率更高,HTTPS更安全 3.加密,解密,密钥 概念 4.为什么要加密? 5.常见的加密方式…...
索引-性能分析-explain
explain 执行计划 explain 执行计划各字段含义 1)id 就是代表 sql 的执行顺序或者表的执行顺序;id相同从上往下执行,id不同,id值越大越先执行;(注:有子查询时就会出现sql执行顺序)…...
mbedtls加密组件使用示例
1 mbedtls aes组件的使用 1.1 AES ECB加解密接口使用 int main(int argc, char *argv[]) {char key[256];char *inbuf calloc(1, 257);char *outbuf calloc(1, 257);char *buf calloc(1,257);char *tmp_outbuf outbuf;char *tmp_buf buf;mbedtls_aes_context aes_ctx;mb…...
如何量测太阳光模拟器的光谱致合度?
太阳模拟器是根据国际法规JIS、IEC60904、美国材料试验协会开发设计的AAA级太阳模拟器。对于100毫米100毫米和200毫米200毫米的光斑尺寸,光斑强度的输出功率范围可以从0.1到1太阳光强度。此外,还提供了灵活的出光方向,以满足用户的研究需求&a…...
脉冲神经网络硬件实现:整数状态SNN的优化策略
1. 脉冲神经网络的硬件实现挑战在神经形态计算领域,脉冲神经网络(SNN)因其生物启发特性和事件驱动的计算范式,正逐渐成为边缘计算和低功耗AI应用的重要选择。作为一名长期从事神经形态硬件设计的工程师,我见证了SNN从理…...
3分钟搞定!网盘直链下载助手:一键获取百度阿里等9大网盘真实下载地址
3分钟搞定!网盘直链下载助手:一键获取百度阿里等9大网盘真实下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云…...
CPAL脚本自动化测试 ———— 诊断安全解锁函数的参数配置与实战陷阱解析
1. CPAL脚本与安全解锁函数基础认知 第一次接触CPAL脚本中的安全解锁函数时,我盯着那堆参数配置整整懵了半小时。这就像拿到一把复杂的电子锁,明明知道每个按钮的功能,但就是找不到正确的组合方式。安全解锁函数本质上是车辆诊断中用于通过27…...
5分钟掌握:终极视频加速控制器的完整实战指南
5分钟掌握:终极视频加速控制器的完整实战指南 【免费下载链接】videospeed HTML5 video speed controller (for Google Chrome) 项目地址: https://gitcode.com/gh_mirrors/vi/videospeed 你是否曾因在线视频播放节奏太慢而失去耐心?或者需要在有…...
微信数据永久保存终极指南:WeChatMsg专业方案全解析
微信数据永久保存终极指南:WeChatMsg专业方案全解析 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatM…...
技术写作如何‘破圈’?从周志明《智慧的疆界》聊聊给非技术朋友讲AI的实用技巧
技术写作如何‘破圈’?从周志明《智慧的疆界》聊聊给非技术朋友讲AI的实用技巧 技术写作的本质是信息传递的艺术,但当受众从同行专家变成产品经理、运营人员甚至完全不懂技术的朋友时,这项艺术就变成了需要刻意练习的"翻译"技能。周…...
fanqienovel-downloader:一键永久保存番茄小说的终极解决方案
fanqienovel-downloader:一键永久保存番茄小说的终极解决方案 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 你是否曾经为心爱的小说突然下架而烦恼?是否希望在网络…...
PCL2启动器:打造你的个性化Minecraft游戏中心
PCL2启动器:打造你的个性化Minecraft游戏中心 【免费下载链接】PCL Minecraft 启动器 Plain Craft Launcher(PCL)。 项目地址: https://gitcode.com/gh_mirrors/pc/PCL 想要一个既美观又强大的Minecraft启动器吗?PCL2启动器…...
基于容器化技术的高交互蜜罐系统设计与实战部署
1. 项目概述:一个高交互的蜜罐系统最近在整理安全研究工具链时,又翻出了beelzebub这个项目。它不是一个新面孔,但在开源蜜罐领域,其设计理念和实现方式一直让我觉得很有意思。简单来说,beelzebub是一个用 Go 语言编写的…...
轻量级网络实战解析:从零构建MobileNetV3-Large核心模块
1. MobileNetV3-Large设计哲学解析 第一次接触MobileNetV3时,最让我惊讶的是它在保持轻量化的同时还能提升精度。这就像用自行车发动机跑出了摩托车的速度,背后是Google团队对移动端算力限制的深刻理解。MobileNetV3-Large作为该系列第三代产品ÿ…...
