Java并发编程—并发和并行、线程上下文

news2024/12/24 3:44:36

文章目录

    • 并发和并行
        • 并发和并行的区别
    • 上下文切换
    • 相关问题
        • 为什么循环次数少的情况下,单线程快?
        • 什么时候需要用多线程?
        • 线程上下文切换消耗的时长?
        • 用什么测试的线程上下文?面试回答下面的工具会加分:
        • 如何减少上下文切换?
        • 减少上下文切换实战
        • 如何打印(查看)线程信息?

——————————————————————————

并发和并行

  • 并发是多线程竞争同一个资源。
  • 并行是指多线程运行,没有资源的竞争。
    注:什么叫做资源?
    ——>变量、方法等都叫资源,占了内存的都叫资源,总之,资源就是变量

并发和并行的区别

  • 并发有资源竞争,并行没有资源竞争
  • 并发是指多线程对同一个变量进行读写操作【多线程对相同资源进行竞争】
  • 并行是进行不同变量的操作,没有相同变量的竞争

上下文切换

  • 是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现
  • 以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的
  • 大部分线程,cpu执行完就销毁,cpu就让出来了,有的线程执行完就销毁,有的线程一直执行
  • 不同的操作系统分配的时间片是不同的(linux操作系统分配时间片是等长的20ms,windows操作系统分配时间片是不等长的几ms~几十ms)
  • 有的线程寿命很短,有的线程执行时间特别长,对于寿命特别长的线程,cpu也得切换到下一个线程执行,只是给这个线程不断分配时间片。
  • cpu在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。
  • 线程上下文: 线程上下文需要记录上次执行的位置和切换,切换是有消耗的
  • 多线程在切换的时候有性能损耗和时间损耗

相关问题

为什么循环次数少的情况下,单线程快?

因为循环次数少的话,启动其他核去执行任务,本身线程是进入就绪态让cpu去选,选的时候也需要消耗时间;单线程时,数量少的话瞬间就能执行完毕;多线程时,有切换的时间消耗。
循环次数多的时候,一般是多线程快,不过并不意味着线程多就一定快

什么时候需要用多线程?

cpu产生浪费的时候使用多线程,才会让性能得到提升;
像操作系统同时运行qq,微信等多个线程是为了体验好,开多个线程后性能是会变慢的

线程上下文切换消耗的时长?

线程上下文切换消耗的时长——将近1ms一次——达到毫秒级别,消耗很大

用什么测试的线程上下文?面试回答下面的工具会加分:

  • 使用Lmbench3可以测量上下文切换的时长。
  • 使用vmstat可以测量上下文切换的次数。

如何减少上下文切换?

减少上下文切换的方法有无锁并发编程、CAS算法、使用最少线程和使用协程。
协程: 在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。

减少上下文切换实战

命令:
sudo -u admin切换管理员权限
注:dump线程信息:显示这一瞬间的线程信息;dump不知存在于线程中,在其他地方也有,比如数据库等,时记录一瞬间状态的

如何打印(查看)线程信息?

jstack命令
在这里插入图片描述注:命令的意思:
sudo -u admin:切换到管理员权限
在 /opt/ifev/java/bin/ :在这个文件夹下面
执行jstack指令
传递3117这个参数查询3117这个进程
保存到/home/tengfei.fangtf/dump17这个文件里面
grep指令
grep:筛选,经常用来查询内容
在这里插入图片描述
——>统计,排序,按照一定格式输出
JBOSS:类似于tomcat,放网站进行运行

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

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

相关文章

DQL简介

学习笔记之DQL 数据查询语言,用来查询数据库中表的记录。 查询关键字:select 基本查询 1查询多个字段 select 字段1,字段2,字段3.. from 表名; select * from 表名;2设置别名 select 字段1 [别名1],字段2[别名2]... from 表名;3…

233搞懂HMM(隐马尔可夫)

文章目录2条性质3个参数3个问题维特比算法参考资料有向图模型,主要用于时序数据建模,在语音识别,自然语言处理等领域,以及在知识图谱命名实体识别中的序列标注,有广泛应用。 HMM模型由两部分组成, 观测变量…

spring boot 应用mybatis

Mybatis入门: Mybatis入门_做测试的喵酱的博客-CSDN博客 目录 一、spring boot 应用mybatis 核心 二、举例: 2.1 背景 2.2 项目结构: 2.3 依赖包 pom 2.4 项目配置文件application.yml 2.5 实例层entity 2.6 mybatis的mapper层 2.7 spring boot…

Android—过渡按钮的简单实现

Android—过渡按钮的简单实现前言准备工作登录页面(activity_main.xml)登录成功页面(activity_new.xml)主要代码给登录按钮设置监听事件(MainActivity.xml)点击登录按钮出现加载动画(TransitionButton.java)当isSuccessful判断为true时(MainActivity.xml)加载动画结束时切入跳转…

C语言笔记-16-Linux基础-文件元数据

C语言笔记-16-Linux基础-文件元数据 文章目录C语言笔记-16-Linux基础-文件元数据前言一、概述二、ln 硬连接三、软连接四、stat 获取元数据总结前言 自学笔记,没有历史知识铺垫(省略百度部分)C语言笔记-16-Linux基础-文件元数据 一、概述 文…

Kaggle泰坦尼克号-决策树Top 3%-0基础代码详解

Titanic Disaster Kaggle,里的经典入门题目,因为在学决策树所以找了一个实例学习了一下,完全萌新零基础,所以基本每一句都做了注释。 原文链接:Titanic: Simple Decision Tree model score(Top 3%) | Kaggle 目录 1.…

SolidWorks如何绘制环形波纹垫片

环形波纹垫片主要用于螺纹式固定件或者防滑螺纹固定中,那这个环形垫片一般怎么用SolidWorks制作呢?首先我们观察到这样的垫片是上下此起彼伏的波纹状,厚度一般1MM左右,制作起来还是有点小难度,但是通过仔细观察,我们可以看到它的大概走向,如图 也就是特征就是这边凹下去…

获取Android签名MD5的方式

形而上者谓之道,形而下者谓之器 我们在申请百度云/腾讯云等第三方的各种服务时,经常会遇到需要提供包名和签名MD5的情况。这里特地总结一下: 1. 获取MD5的一般方式 1.1 有签名文件(.keystore)的情况下: keytool -list -v -keystore XXX.key…

【沐风老师】3DMAX一键生成圣诞树建模插件使用教程

圣诞节快到了,给大家分享一款3DMax一键生成圣诞树模型插件: 3DMAX一键生成圣诞树建模插件,可以生成定制和随机两种3D圣诞树模型,并自动赋予材质和贴图。 【安装方法】 方法一:解压后直接拖动插件脚本文件到3dMax窗口…

使用springboot实现jsonp|jsonp的实现|JSONP的实现使用springboot

1、服务端&#xff1a; 1.1、项目目录&#xff1a; 1.2、pom文件&#xff1a; <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…

从一到无穷大 #3 对象存储.浅谈

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录引言Windows Azure StorageNosql&#xff1a;TiKV为例总结引言 天才的开源精神对于普…

67-94-hive-函数-开窗函数-常用函数-udf自定义函数

67-hive-函数&#xff1a; UDF:一进一出&#xff0c;普通函数 UDAF:多进一出&#xff0c;聚合函数 UDTF&#xff1a;一进多出&#xff0c;炸裂函数 一、多指的是输入数据的行数。一行变多行&#xff0c;多行变一行。 函数 #查看系统自带的函数 hive> show functions; …

Docker以标准方式安装部署Redis

Docker安装redis的命令很简单&#xff0c;但是很多都是半成品的命令&#xff0c;说白了&#xff0c;就是自己玩玩&#xff0c;一个demo级别的redis而已。 本篇文章以最全的命令方式安装部署Redis。 注意&#xff1a; 本篇只是单机版的&#xff0c;只是公司测试环境使用&…

解决npm的 EACCES: permission denied 问题

居上位而不骄&#xff0c;在下者而不忧。 平时项目开发使用npm都顺风顺水的&#xff0c;but今天新建项目时&#xff0c;就出现了权限错误&#xff0c;具体如下&#xff1a; 但是通过下面的提示就可以轻松解决。 sudo chown -R 502:20 “/Users/cheng.wang/.npm” 官网相关议题…

Redis源码篇(7)——哨兵模式

哨兵模式 哨兵模式即在主从复制的基础上增加哨兵监控以控制主从切换实现高可用的一种模式。 本篇主要介绍sentinel系统初始化&#xff0c;心跳检测&#xff0c;故障转移的过程 初始化 从最开始的 redis-server xxx.conf --sentinel 、 redis-sentinel xxx.conf 命令看起。当一…

CUDA 编程简介

参考资料&#xff1a; NVIDIA CUDA Programming Guide, NVIDIA. (https://docs.nvidia.com/cuda/cuda-c-programming-guide/)国科大《并行与分布式计算》课程、NVIDIA 在线实验平台 文章目录GPU & CUDAG80 Graphics ModeG80 CUDA ModeCUDA Programming ModelCUDA Extends …

重定向转发,接收请求参数及数据回显-P11,12

重定向和转发&#xff1a; 我们的实现本身就是转发 。 想删掉视图解析器的话&#xff0c;就需要在return把路径写全 重定向就改为redirect&#xff1a;而且重定向不走视图解析器&#xff0c;因为是新的请求&#xff0c;新的URL。 接收请求参数&#xff1a; 第一种是默认的方式…

【FreeRTOS(十二)】事件标志组

文章目录事件标志组创建事件标志组 xEventGroupCreate将指定的事件位清零 xEventGroupClearBits将指定的事件位置 1 xEventGroupSetBits获取事件标志组值 xEventGroupGetBits等待指定的事件位 xEventGroupWaitBits代码示例事件标志组 事件标志位 事件位用来表明某个事件是否发…

嵌入式Linux 开发经验:编写用户态应用程序打开 misc 设备

参考文章 VSCode SSH 连接远程ubuntu Linux 主机 ubuntu 20.04 qemu linux6.0.1 开发环境搭建 ubuntu 20.04 qemu linux6.0.1 制作ext4根文件系统 嵌入式Linux 开发经验&#xff1a;platform_driver_register 的使用方法 嵌入式Linux 开发经验&#xff1a;注册一个 misc 设…

创新案例|实现YouTube超速增长的3大敏捷组织运营机制(上)

从2008年到2014年YouTube进入超速增长模式。时任核心技术负责人的 Shishir Mehrotra回顾了当时公司面临的挑战&#xff0c;以及带领YouTube团队如何建立一套敏捷运营机制的先进实践&#xff0c;以保持战略对齐并运营复杂的业务。这直接推进公司每周高效的工作节奏&#xff0c;以…