-
Java高并发-概念
一、为什么需要并行
业务要求
- http处理多个客户端请求
- java虚拟机启动多个线程
- 进程开销比线程大的多
性能
- 多线程在多核系统比单线程要好的多
摩尔定律失效
二、几个重要概念
2.1 同步和异步
synchronous,asynchronous
2.2 并发和并行
concurrency,parallelism
2.3 临界区
临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待。
2.4 阻塞和非阻塞
blocking,non-blocking
阻塞和非阻塞通常用来形容多线程音的相互影响。比如一个线程占用了临界区资源,那么其它所有需要这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起。这种情况就是阻塞。此时,如果占用资源的线程一直不愿意释放资源,那么其它所有阻塞在这个临界区上的线程都不能工作。
非阻塞允许多个线程同时进入临界区。
2.5 死锁、饥饿和活锁
deadlock,starvation,livelock
死锁:抢占资源而不释放
饥饿是指某一个或者多个线程因为种种原因无法获得所需要的资源,导致一直无法执行。比如某线程因优先级低获取不到资源。
活锁:电梯遇人
2.6 并行的级别
阻塞:当一个线程进入临界区后,其他线程必须等待
无障碍(Obstruction-Fee):
- 无障碍是一种最弱的非阻塞高度
- 自由出入临界区
- 无竞争时,有限步内完成操作
- 有竞争时,回滚数据
无锁(Lock-Fee):
- 是无障碍的
- 保证有一个线程可以胜出
// 典型的无锁代码
while(!atomicVar.compareAndSet(localVar, localVar+1)) {
localVar = atomicVar.get();
}
无等待(Wait-Free):
- 无锁的
- 要求所有的线程都必须在有限步内完成
- 无饥饿的
三、2个重要的定理
3.1 Amdahl定律(阿姆达定律)
3.2 Gustafson定律(古斯塔夫森)
出处:https://www.cnblogs.com/okokabcd/p/8720941.html
栏目列表
最新更新
80386学习(二) 80386特权级保护
80386学习(一) 80386CPU介绍
8086汇编语言学习(十) 8086中断
8086汇编语言学习(九) 8086标志寄存器
8086汇编语言学习(九) 8086标志寄存器
8086汇编语言学习(八) 8086子程序
8086汇编语言学习(六) 8086处理结构化数据
8086汇编语言学习(五) 8086寻址方式
8086汇编语言学习(四) 8086汇编程序的编译
8086汇编语言学习(三) 8086中的段和栈
三大常用数据库事务详解之三:事务运行
三大常用关系型数据库事务详解之二:基
三大关系型数据库事务详解之一:基本概
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
在vscode中使用R时,用快捷键来快捷键入卡
VB.NET中如何快速访问注册表
ASP.NET中图象处理过程详解
Vue(1)Vue安装与使用
JavaScript 语言入门
js将一段字符串的首字母转成大写
纯原生html编写的h5视频播放器
H5仿原生app短信验证码vue2.0组件附源码地
TypeScript(4)接口
TypeScript(3)基础类型