并发编程面试1

news/2024/7/8 8:38:25/文章来源:https://www.cnblogs.com/northli/p/18286417

一、进程,线程,协程的区别

1、进程: 操作系统进行资源分配和调度的基本单位。每个进程有独立的内存空间。进程通讯就采用 共享内存,MQ,管道。

2、线程: 一个进程可以包含多个线程,线程就是CPU调度的基本单位。一个线程只属于某一个进 程。线程之间通讯,队列,await,signal,wait,notity,Exchanger,共享变量等等都可以实现 线程之间的通讯。

3、协程: 协程是一种用户态的轻量级线程。它是由程序员自行控制调度的。可以显示式的进行切换。 一个线程可以调度多个协程。 协程只存在于用户态,不存在线程中的用户态和内核态切换的问题。协程的挂起就好像线程的 yield。 可以基于协程避免使用锁这种机制来保证线程安全。 单独的拿协程和线程做一个对比: 更轻量: 线程一般占用的内存大小是MB级别。协程占用的内存大小是KB级别。 简化并发问题: 协程咱们可以自己控制异步编程的执行顺序,协程就类似是串行的效果。 减少上下文切换带来的性能损耗: 协程是用户态的,不存在线程挂起时用户态和内核态的切 换,也不需要去让CPU记录切换点。 协程优化的点: 协程在针对大量的IO密集操作时,协程可以更好有去优化这种业务。

二、Java中创建线程方式

Java中创建线程方式,只有一种,本质都是Runnable的形式。

1、继承Thread

2、Runnable,本质都是他! 3、Callable:Callable一般需要配合FutureTask来执行,执行的是FutureTask中的run方法,而 FutureTask实现了RunnableFuture的接口,RunnableFuture的接口又继承的Runnable。

4、线程池:线程池中的工作线程是Worker,Worker实现了Runnable,在构建工作线程时,会 new Worker对象,将Worker传递给线程工厂构建的Thread对象。本质还是Runnable。

三、如何结束线程

1、stop这种就不用说了。

2、现在结束线程比较优雅的方式只有一个, run方法结束 (正常结束,异常结束) 每个线程都有一个中断标记位,这个标记位默认是false。 当你执行这个线程的interrupt方法后,这个标记位会变为true while(!Thread.currentThread.isInterrupted()) 当你线程处于阻塞的状态下,比如await,wait,在阻塞队列,sleep等等,此时如果被中 断,会抛出InterruptedException 也可以直接指定共享变量。 volatile boolean flag = false; run(){ while(!flag){ // 处理任务!! } }

四、ThreadLocal的作用,和内存泄漏问题 在开发中会用到的方式就是 传递参数 。

ThreadLocal有两个内存泄漏问题: key: key会在玩花活使用ThreadLocal时 ,在局部声明ThreadLocal,局部方法已经执行完 毕,但是线程会指向ThreadLocalMap,ThreadLocalMap的key会指向ThreadLocal对象,这 会导致ThreadLoc会被al对象不回收。所以ThreadLocal在设计时,将key的引用更改为了弱引 用,如果再发生上述情况,此时ThreadLocal只有一个弱引用指向,可以被正常回收。 value: 如果是普通线程使用ThreadLocal,那其实不remove也不存在问题,因为线程会结 束,销毁,线程一销毁,就没有引用指向ThreadLocalMap了,自然可以回收。但是如果是线程 池中的核心线程使用了ThreadLocal,那使用完毕,必须要remove,因为核心线程不会被销毁 (默认),导致核心线程结束任务后,上一次的业务数据还遗留在内存中,导致内存泄漏问题。

五、伪共享问题以及处理方案 伪共享问题需要先掌握一下CPU缓存的事。

所谓的伪共享就是多个数据公用一个缓存行发生的问题。 当一个缓存行的64个字节,缓存了多个数据(ABCD),此时因为JVM的操作,A数据被修改了,但 是对于CPU来说,我只能知道当前缓存行的数据被修改了,现在的数据不安全,需要重新的去JVM 中将数据同步一次。 因为CPU执行的效率特别快,如果去主内存中同步一次数据,相对CPU的速度来说,就好像咱们执 行代码时查询了一次数据库,很影响效率。 想解决这个问题,避免其他线程写缓存行导致当前线程需要去主内存查询,可以让某个线程直接占满 当前缓存行的64k大小即可。 占满缓存行,独自使用,其实就是利用空间换时间的套路。 long l1,l2,l3,l4,l5,l6,l7; long value; long l9,l10,l11,l12,l13,l14,l15; 六、CPU缓存可见性问题发生的原因 CPU缓存可见性的问题,就是在缓存行数据发生变化时,会发出通知,告知其他内核缓存行数据设 置为无效。 但是因为CPU厂商为了提升CPU的执行效率,经常会追加一些优化的操作,StoreBuffer, Invalidate Queue。这些就会导致MESI协议通知受到影响,同步数据没那么及时。 所以CPU内部提供了一个指令, lock前缀指令 ,如果使用了lock前缀指定去操作一些变量,此时会 将数据立即写回到主内存(JVM),必然会触发MESI协议,类似StoreBuffer,Invalidate Queue的 缓存机制也会立即处理

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

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

相关文章

Mybatis PageHelper编译SQL引发的一次性能问题.18286262

起源 最近一直在跟大佬们做公司项目的性能优化,我这种小卡乐咪基本上负责的就是慢接口优化,但实际上只有以下几种情况需要进行接口代码级别的改造:循环查库、RPC 数据库设计不合理 业务流程太长,代码耦合性太高等随着对接口分析的深入,我们越来越发现系统中有很多拖后腿的…

蓝牙音箱App设计总结

前言 最近做了一个关于带Sound bar的智能电视的蓝牙项目,就是将电视Sound bar当作蓝牙音箱,将手机、电脑等设备的声音传输到电视,通过电视Soundbar播放声音。做这个项目的时候遇到了各种大大小小的问题,好在都解决了。本篇文章总结了在设计蓝牙相关的项目时需要了解的小知识…

设计模式学习(二)工厂模式——抽象工厂模式

介绍抽象工厂模式,并说明其优缺点目录背景抽象工厂模式优点与缺点 背景 现在我需要开发一个相机操作模块,它可能在Windows下运行,也可能在Linux下运行。由于在厂家提供的SDK中,Windows下的SDK和Linux下的SDK是有区别的,因此我们要创建两个类去封装这两个不同平台下的API。…

aippt 实现原理 AI生成PPT开源项目

AI生成PPT原理与代码实现通过 AI 生成 PPT 火了好长一段时间了,该类型产品也越来越多,我分析了几个主流的 aippt 产品,其中有一家公司的技术原理让我眼前一亮:文多多 AI 生成 PPT,官网: https://docmee.cn 该产品在 github 上有对应开源项目:https://github.com/veasion…

自定义流程表单开发优势体现在什么地方?

一起来了解自自定义流程表单开发的优势特点。提质、增效、降本,应该是很多职场办公需要实现的发展目标。那么,应用什么样的软件平台可以实现?低代码技术平台、自定义流程表单开发是目前流行于职场行业中的软件产品,可视化操作界面、够灵活、易维护等优势特点明显,在推进企…

Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV,Stochastic Volatility) 模型|附代码数据

全文下载链接:http://tecdat.cn/?p=16708 最近我们被客户要求撰写关于随机波动率的研究报告,包括一些图形和统计输出。 波动率是一个重要的概念,在金融和交易中有许多应用。它是期权定价的基础。波动率还可以让您确定资产配置并计算投资组合的风险价值 (VaR) 甚至波动率本身…

2024.7.5 鲜花

菜就多练空白とカタルシス——TOGENASHI TOGEARI。震惊,K某He 强推竟然是这首歌,三天重复上百遍…… どれだけ手に入れても どれだけ自分のものにしてもしてもしても 追いつけないな 高望みしすぎなんて 腐ったような言葉 誰しも誰よりも優れて欲しくはないんだよ 理由はただ…

泛娱乐出海新风口,视频云技术需要怎样的融合创新?

泛娱乐的音视频技术随着出海在演进,交互和内容的技术是内核,也在融合。 泛娱乐的音视频技术随着出海在演进,交互和内容的技术是内核,也在融合。 面向出海,虽然娱乐社交这个行业由来已久,但近几年的商业模式发生了巨大变化,比如行业刚兴起时,大家要先把DAU做大之后再…

米尔瑞米派集聚5种操作系统,兼顾学习开发和项目产品需要的派

米尔电子发布的瑞萨第一款MPU生态板卡-瑞米派(Remi Pi),采用瑞萨RZ/G2L双核A55芯片,接口丰富,全面兼容树莓派的扩展模块。瑞米派支持五种系统,兼顾学习开发和项目产品需要。软件提供五种软件系统分别为:基于Yocto构建的两种系统,一种是支持通用功能的精简型系统,另一种…

echarts中Label标签与数据项颜色设置为同一种颜色

echarts5中默认标签颜色不会跟数据项颜色保持一致,而是全都是黑色。想要实现label颜色和它的数据项颜色一致,需要手动继承颜色,设置label{ color: inherit}即可解决label标签颜色与数据项颜色一致。 https://echarts.apache.org/examples/zh/editor.html?c=pie-simple 注意…

GaussDB AI新特性:gs_index_advise推荐索引

GaussDB的AI新特性,可以把SQL文本嵌套在函数中,数据库会返回一个创建合适索引的列gs_index_advise(text) 描述:针对单条查询语句推荐索引。 参数: SQL语句字符串 返回值类型: record 一、通常的SQL优化会通过参数调优的方式进行调整,例如如下参数set enable_fast_query_s…

Packing Python to exe(打包Python成EXE文件)

Python文件要执行需要Python环境,如果package成EXE文件则可以随意放在任意主机上去执行。package步骤如下: 1. 安装pythoninstaller (pip install pyinstaller) 2.安装auto-py-to-exe(有UI界面,很方便使用)(pip install auto-py-to-exe) 3.然后直接运行命令auto-py-to-e…

Sqlalchemy 连接SQL Server 登录失败

实验系统环境 Windows平台 Sqlalchemy 2.0.23 Python 3.10 SQL Server 2012 aioodbc 0.5.0 问题详情 sqlalchemy.exc.InterfaceError: (pyodbc.InterfaceError) (28000, [28000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]登录失败。该登录名来自不受信任的域,不…

电脑使用什么远程控制软件?推荐使用安全软件ToDesk

当你面临紧急工作需求,但却和办公电脑相隔千里时,远程控制电脑就派上了用场! 初次使用远程控制软件的人,可能会担心使用时会不会存在信息被盗取,使用过后会不会发生被陌生人悄悄远控的情况 小社长向大家安利一个超好用的远程控制软件ToDesk!电脑远程控制高清不卡顿,传输…

便宜SSL证书申请Lets Encrypt泛域名SSL证书

随着互联网的飞速发展,网络安全问题愈发凸显其重要性。而HTTPS协议作为保障网站数据传输安全的重要手段,已经得到了广泛的应用。 申请Lets Encrypt便宜泛域名SSL证书步骤1. 登录来此加密网站,输入域名,可以勾选泛域名和包含根域。2. 选择加密方式,一般选择默认就可以了,也…

ToDesk云电脑实测!轻松应对游戏电竞、AIGC创作、设计建模等场景

万物智联时代,现代社会对数字计算的需求呈指数级增长。当算力成为推动技术创新和应用发展的重要引擎,云电脑产业正在悄然占据国内算力应用的市场,成为新时代的数字经济发展方向。1云电脑,顾名思义,是一台随时运行在云上的“电脑”,操作系统、存储、运算都能在云端上进行,…

ToDesk智能无损画质是什么功能?如何使用1

能跨设备跨系统远程控制设备的ToDesk相信大家都有用过,它不仅有流畅的远控体验,而且开发了许多实用的插件功能。 比如能直接从硬盘高速传资料的文件传输功能,官方实测能达到12m/s,还有能远程开关机,太方便远程办公完需要关电脑的打工人了。最近小社长还发现ToDesk远程控制…

Mingw GCC 编译OpenCV报错: Project files may be invalid

这是一个通用报错弹窗:具体要看下边输出窗口:CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool. CMake Error: CMAKE_CXX_COMPIL…

linux部署Hugegraph

HugeGraph是一款易用、高效、通用的开源图数据库系统(Graph Database)。 一、基本概述功能特性:HugeGraph实现了Apache TinkerPop3框架,并完全兼容Gremlin查询语言,具备完善的工具链组件,助力用户轻松构建基于图数据库之上的应用和产品。它支持百亿以上的顶点和边快速导入…

ComfyUI进阶篇:ComfyUI核心节点(一)

ComfyUI进阶篇:ComfyUI核心节点(一)前言:学习ComfyUI是一场持久战。当你掌握了ComfyUI的安装和运行之后,会发现大量五花八门的节点。面对各种各样的工作流和复杂的节点种类,可能会让人感到不知所措。在这篇文章中,我们将用通俗易懂的语言对ComfyUI的核心节点进行系统梳理,…