并发常见问题
来源:互联网 发布:微信一键转发程序源码 编辑:程序博客网 时间:2024/06/05 14:04
并发编程
1.上下文切换
CPU会给每个线程分配CPU时间片,当前任务执行一个时间片后会切换下一个任务。但切换前保存上一个任务的状态,以便下次切换可加载该线程的任务状态。其实每一个任务切换都会耗时耗资源。
2.如何减少上下文切换
无锁并发编程、cas算法、使用最少线程、通过协程
3.产生死锁
指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象
4.避免产生死锁
避免一个线程同时获取多个锁
避免一个线程占用多个资源
可以使用定时锁进行控制
5.资源限制
程序执行受限于计算机硬件或软件资源。
6.volatile
volatile变量修饰的共享变量进行写操作,汇编代码会出现lock命令。lock指令会在多核情况中引发两件事
1.当前处理器缓存行的数据写回系统内存
2.这个写回内存操作会使其他CPU缓存了该内存地址的数据无效
7.Synchonized原理
jvm基于进入和退出monitor对象实现方法同步和代码块同步。monitorenter 会出现同步代码开始,monitorexit会出现作用域结束处和异常处
8.锁
偏向锁:同一个线程多次获得锁,偏向锁在栈帧中记录锁偏向的线程ID,以后该线程再次进入不需要进行CAS操作来加锁和解锁,只需要测试对象是否存储着指向当前线程的偏向锁
轻量锁
重量锁
9.处理器如何处理实现原子操作
1 .使用总线锁保证原子型,总线锁会把CPU和内存之间通信锁住,其他处理器不能处理其他内存地址的数据
2.使用缓存保证原子性,修改内部的内存地址,并允许它的缓存一致性机制来保证操作的原子性
1.上下文切换
CPU会给每个线程分配CPU时间片,当前任务执行一个时间片后会切换下一个任务。但切换前保存上一个任务的状态,以便下次切换可加载该线程的任务状态。其实每一个任务切换都会耗时耗资源。
2.如何减少上下文切换
无锁并发编程、cas算法、使用最少线程、通过协程
3.产生死锁
指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象
4.避免产生死锁
避免一个线程同时获取多个锁
避免一个线程占用多个资源
可以使用定时锁进行控制
5.资源限制
程序执行受限于计算机硬件或软件资源。
6.volatile
volatile变量修饰的共享变量进行写操作,汇编代码会出现lock命令。lock指令会在多核情况中引发两件事
1.当前处理器缓存行的数据写回系统内存
2.这个写回内存操作会使其他CPU缓存了该内存地址的数据无效
7.Synchonized原理
jvm基于进入和退出monitor对象实现方法同步和代码块同步。monitorenter 会出现同步代码开始,monitorexit会出现作用域结束处和异常处
8.锁
偏向锁:同一个线程多次获得锁,偏向锁在栈帧中记录锁偏向的线程ID,以后该线程再次进入不需要进行CAS操作来加锁和解锁,只需要测试对象是否存储着指向当前线程的偏向锁
轻量锁
重量锁
9.处理器如何处理实现原子操作
1 .使用总线锁保证原子型,总线锁会把CPU和内存之间通信锁住,其他处理器不能处理其他内存地址的数据
2.使用缓存保证原子性,修改内部的内存地址,并允许它的缓存一致性机制来保证操作的原子性
阅读全文
0 0
- 并发常见问题
- 并发常见问题
- java并发常见问题
- Java并发多线程常见问题
- 多线程并发常见问题
- 多线程并发常见问题
- 高并发系统中的常见问题
- 高并发系统中的常见问题
- 高并发系统中的常见问题
- java并发系列:一线程常见问题
- 高并发等大型网站架构常见问题
- 高并发场景下缓存的常见问题
- 并发危险:解决多线程代码中的11个常见问题
- 高访问,高并发等大型网站架构常见问题汇总
- 缓存在高并发场景下的常见问题
- 缓存在高并发场景下的常见问题
- 缓存在高并发场景下的常见问题
- 缓存在高并发场景下的常见问题
- 遗传算法
- org.springframework.beans.BeanInstantiationException浅析
- log4j 配置文件详解
- hoj 3275 快排划分主元
- SQL Server 数据库基础编程
- 并发常见问题
- Maven打包Spring boot,把依赖和配置文件及前端代码提取到jar文件外
- 计算几何 学习笔记
- 手把手教你webpack3(10)Less-Loader配置简述
- (字节流、字符流和转换流)
- BZOJ1196(HNOI2006)[公路修建问题]--二分
- 概率图模型: Coursera课程资源分享和简介
- [李超线段树] BZOJ3165 [Heoi2013]. Segment
- spring-boot打包,引入外部jar包问题