当前位置:   article > 正文

深入理解CPU密集型与IO密集型任务、线程池如何选择?_cpu密集型和io密集型 线程池

cpu密集型和io密集型 线程池

目录

1、理解什么是CPU密集型与IO密集型

1.1 CPU密集型

概念解释

策略

1.2 I/O密集型

概念解释

策略

2、《Java并发编程实践》:具体的线程数该如何设置?线程池参数如何设置?

 参数解释

3、总结


1、理解什么是CPU密集型与IO密集型

1.1 CPU密集型

概念解释

        即,计算密集型,I/O能够在很短的时间内完成,而相对的CPU却有大量运算要处理。例如计算大量的加减乘除、矩阵运算等,都属于CPU密集型。

策略

        我们知道,线程是最小的可执行单位
        严格来说,每个核心同一时间只能处理一条线程的指令,因此如果是单核CPU的情况下,创建再多的线程其实也不会加快运算速度,反而会因为单核的线程并发导致线程上下文的切换而降低效率。(类似于一个工人干了多个活)
        而在多核cpu下,可以创建多个线程让多个cpu并行运算,一起工作。(多个工人同时做多个活),从而提升效率。

1.2 I/O密集型

        IO密集型指的是系统的CPU性能相对硬盘、内存要好很多,此时,大部分的状况是CPU在等I/O (硬盘/内存) 的读/写操作,但CPU的使用率不高。
        在实际开发中,IO密集型任务也很常见,例如:
        磁盘IO:读写本地的数据库、Redis,等。

        网络IO:http 请求、远程数据库读写、远程 Redis 读写,等

概念解释

        这里需要解释一下,什么叫“CPU在等I/O (硬盘/内存) 的读/写操作”?

        在传统的阻塞式 I/O 操作模型中,当 CPU 发起一个 I/O 请求后,发起该操作的线程会一直阻塞等待 I/O 操作的完成:
        当线程发起一个阻塞式的 IO 操作时,它会等待操作完成,期间线程将被挂起,无法继续执行其他指令,这种模型导致了CPU的使用率不高。需要注意的是,IO 阻塞并不是直接阻塞 CPU 的执行,而是阻塞了发起 IO 操作的线程。其他未受影响的线程仍然可以继续执行。

策略

        在上面的基础上我们知道,在处理IO密集型任务,即使创建了线程,也可能因为IO的阻塞等待而让线程阻塞、从而导致CPU不干活一直摸鱼

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/642186
推荐阅读
相关标签