多线程之核心线程如何设置理解记录



概念描述

1.1 CPU密集型

`概念定义:`
	cpu密集型又称计算密集型,指大部分时间用来做计算逻辑判断等CPU动作的程序称为CPU密集型任务。
	该类型的任务需要进行大量的计算,主要消耗CPU资源。这种计算密集型任务虽然也可以用多任务完成,
	但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,
	所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。
`特点:`
	1、CPU 使用率较高(也就是经常计算一些复杂的运算,逻辑处理等情况)非常多的情况下使用
	2、针对单台机器,最大线程数一般只需要设置为CPU核心数的线程个数就可以了

1.2 IO密集型

`概念定义:`
	IO密集型任务指任务需要执行大量的IO操作,涉及到网络、磁盘IO操作,对CPU消耗较少,其消耗的主要资源为IO。
	我们所接触到的 IO ,大致可以分成两种:磁盘 IO和网络 IO。
	'01':磁盘 IO ,大多都是一些针对磁盘的读写操作,最常见的就是文件的读写,
	    假如你的数据库、 Redis 也是在本地的话,那么这个也属于磁盘 IO。
	'02':网络 IO ,这个应该是大家更加熟悉的,我们会遇到各种网络请求,
      比如 http 请求、远程数据库读写、远程 Redis 读写等等。
`特点:`
	1、需要等待,我们请求一些数据,由对方将数据写入缓冲区,在这段时间中,
	  需要读取数据的线程根本无事可做,因此可以把 CPU 时间片让出去,直到缓冲区写满。
	  既然这样,IO 密集型任务其实就有很大的优化空间了(毕竟存在等待):
	2、CPU 使用率较低,程序中会存在大量的 I/O 操作占用时间,导致线程空余时间很多,
	  所以通常就需要开CPU核心数两倍的线程。当线程进行 I/O 操作 CPU 空闲时,
	  线程等待时间所占比例越高,就需要越多线程,启用其他线程继续使用 CPU,以此提高 CPU 的使用率;
	  线程 CPU 时间所占比例越高,需要越少的线程,这一类型在开发中主要出现在一些计算业务频繁的逻辑中

总结

`01:计算为主的程序(cpu密集型程序)`:
	多线程跑的时候,可以充分利用起所有的 CPU 核心数,比如说 8 个核心的CPU ,开8 个线程的时候,
	可以同时跑 8 个线程的运算任务,此时是最大效率。但是如果线程远远超出 CPU 核心数量,
	反而会使得任务效率下降,因为频繁的切换线程也是要消耗时间的。
	因此对于 CPU 密集型的任务来说,线程数等于 CPU 数是最好的了。
`02:磁盘或网络为主的程序(IO密集型程序)`:
	一个线程处在 IO 等待的时候,另一个线程还可以在 CPU 里面跑,有时候 CPU 闲着没事干,
	所有的线程都在等着 IO,这时候他们就是同时的了,而单线程的话此时还是在一个一个等待的。
	我们都知道 IO 的速度比起 CPU 来是很慢的。此时线程数等于CPU核心数的两倍是最佳的。

参考文章:https://www.cnblogs.com/liangbaolong/p/13201403.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值