为什么需要多线程
- 现在的计算机大多数都是多核cpu,单线程运行程序就只能利用其中一个。
- 所以根据cpu核心数选取正确的线程数能有效利用资源,提升性能。
程序分类
- cpu密集型:就是线程大多数时间都是用于cup的数据处理。
- I/O密集型:相对的,这个是程序大多操作都是在执行I/O操作
线程数量选取
- cpu密集型:
理论上线程数量=cpu核心数就行了,一个cpu核心执行一个线程,避免切换线程带来的消耗。
但是实际上会设置cpu逻辑核心数+1。
《Java并发编程》
计算(CPU)密集型的线程恰好在某时因为发生一个页错误或者因其他原因而暂停,刚好有一个“额外”的线程,可以确保在这种情况下CPU周期不会中断工作。
- I/O密集型:
这种类型的程序执行时有很大部分时间是在I/O的消耗上,所以会导致cpu空闲时间较多。此时根据cpu核数计算线程数量就不合算了。
最佳线程数 = CPU核心数 * (1/CPU利用率)
= CPU核心数 * (1 + (I/O耗时/CPU耗时))
cpu使用率获取
APM(Application Performance Manager)工具可以帮我们找到准确的数据
- SkyWalking
- CAT
- zipkin
网友评论