疏漏总结(一)

线程池大小如何设置

对于计算密集型的任务,一个有Ncpu个处理器的系统通常通过使用一个Ncpu+1个线程池来获得最优的利用率。

对于包含了IO和其他阻塞操作的任务,不是所有的线程都会在所有的时间被调度,因此需要一个更大的池。2*Ncpu
Nthreads = Ncpu x Ucpu x (1 + W/C)其中,
Ncpu = CPU核心数
Ucpu = CPU使用率,0~1
W/C = 等待时间与计算时间的比率

线程数 = Ncpu / (1 - 阻塞系数) = Ncpu x (1 + W/C)

线程池数设置过大有什么缺点:如果maxsize过大会占用更多的资源,cpu会频繁进行上下文切换,会导致cpu缓存的数据失效和重新加载,结果就是上下文切换和reload的时间变多,也就是说cpu将更多的时间花费到对线程的管理上去了,这个时候更多的线程反而更慢。

Mysql

在mysql中行级锁并不是直接锁记录,而是锁索引。InnoDB行锁是通过给索引项加锁实现的,索引分为主键索引和非主键索引两种,如果一条SQL语句操作了主键索引,MySQL就会锁定这条主键索引;如果一条语句操作了非主键索引,MySQL会先锁定该非主键索引再锁定相关的主键索引。如果没有主键索引,InnoDB会通过隐藏的聚簇索引来对记录加锁。也就是说:如果不通过索引条件检索数据,那么InnoDB将对表中所有数据加锁,实际效果跟表级锁一样。

发布了247 篇原创文章 · 获赞 31 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44240370/article/details/104978099