程序开多少线程合适?

1. CPU 密集型程序,一个完整请求,I/O操作可以在很短时间内完成,CPU还有很多运算要处理,也就是说 CPU
计算的比例占很大一部分,线程等待时间接近0
1. 单核CPU: 一个完整请求,I/O操作可以在很短时间内完成, CPU还有很多运算要处理,也就是说 CPU
计算的比例占很大一部分,线程等待时间接近0。单核CPU处理CPU密集型程序,这种情况并不太适合使
用多线程。
2. 多核 : 如果是多核CPU 处理 CPU 密集型程序,我们完全可以最大化的利用 CPU 核心数,应用并发编
程来提高效率。CPU 密集型程序的最佳线程数就是:理论上线程数量 = CPU 核数(逻辑),但是实际区 别 类 型 synchronized Lock 存 在 层 次
Java的关键字,在jvm层面上
JVM的一个接口 锁 的 获 取
假设A线程获得锁,B线程等待。如果A
线程阻塞,B线程会一直等待
情况而定,Lock有多个锁获取的方式,大致就是可以尝
试获得锁,线程可以不用一直等待(可以通过tryLock判断
有没有锁) 锁 的 释 放
1、以获取锁的线程执行完同步代码,
释放锁2、线程执行发生异常,jvm会让
线程释放
finally中必须释放锁,不然容易造成线程死锁
锁可重入、不可中断、非公平
可重入、可判断 可公平(两者皆可) 性 能
少量同步
适用于大量同步 支 持 锁 的 场 景
1. 独占锁
1. 公平锁与非公平锁
上,数量一般会设置为 CPU 核数(逻辑)+ 1(经验值),计算(CPU)密集型的线程恰好在某时因为发生
一个页错误或者因其他原因而暂停,刚好有一个额外的线程,可以确保在这种情况下CPU周期不会中
断工作
2. I/O 密集型程序,与 CPU 密集型程序相对,一个完整请求,CPU运算操作完成之后还有很多 I/O 操作要做,
也就是说 I/O 操作占比很大部分,等待时间较长,线程等待时间所占比例越高,需要越多线程;线程CPU时间
所占比例越高,需要越少线程
1. I/O 密集型程序的最佳线程数就是: 最佳线程数 = CPU核心数 (1/CPU利用率) = CPU核心数 (1 + (I/O
/CPU耗时))
2. 如果几乎全是 I/O耗时,那么CPU耗时就无限趋近于0,所以纯理论你就可以说是 2NN=CPU核数),
当然也有说 2N + 1的,1应该是backup
3. 一般我们说 2N + 1 就即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rookie小强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值