IO、CPU密集型分别指什么,有哪些例子,讲透线程池(2/4)

I/O 密集型 = 等待。
CPU 密集型 = 计算型。

2 00ms HTTP 请求,9 5 % 的时间处于 I/O 模式。
读取 1 GB 文件,9 8 % 的时间在磁盘上完成。

视频编码,CPU负载9 9 %。
矩阵运算,GPU内存已满。

I/O 密集型,2 0 个线程池,5 0% CPU 利用率。
CPU密集型,8 个线程池,CPU利用率9 0%。

不要使用线程数来充分利用 I/O。
否则,处理器的处理能力将不足以执行计算。

IO、CPU密集型分别指什么,有哪些例子,讲透线程池(2/4)

哈喽,小A又来和大家聊天啦!至于线程组,面试官喜欢问有没有必要。
记得几年前我还很困惑。
但现在,我有了一些经验。
今天我们就来聊聊这个IO密集型和CPU密集型的小秘密。

我们首先要明白,这台计算机只是一个大机器,负责输入、计算、输出。
听起来很复杂,但实际上和线程池没有任何关系。
让我们关注业务逻辑,看看如何使用线程池。

首先我们来说说IO密集型和CPU密集型。
发送请求、等待回复等IO密集型业务逻辑需要花费大量时间。
对于CPU密集型业务逻辑,如计算、序列化、加解密等,计算量大、时间短,因此机器非常繁忙。

在之前的面试中,我遇到过这样的场景:业务包括IO密集型业务,例如从数据库读取数据,以及CPU密集型业务,例如加密。
当这两件事结合在一起时,就变得很头疼了。

明白了这一点,我们就可以根据业务需求来配置线程池了。
对于IO密集型业务,可以在线程池中拥有更多线程。
对于CPU密集型业务,可以使用更少的线程。
不要让CPU闲置。

说实话,当时我并没有想到这一点,但现在回想起来,这其实是事实。
在接下来的文章中,我将继续深入探讨线程池的运行模式、验证方法以及池化技术的原理。
希望大家能够跟随我,慢慢揭开这个谜团的面纱。
下次见!

Java线程池在运行后的结果反查

未来的对象是重点。
了解任务执行的状态。

submit() 方法返回一个 Future。
Runnable 不返回值,但 Callable 返回值。

isDone() 检查操作是否已完成。
get() 等待结果返回。

在此示例中,线程池在单个线程上运行。
首先执行Callable,然后执行Runnable。

输出顺序取决于系统调度。
get() 等待 Callable 结果。

shutdown() 停止线程池。
你必须打电话。

callable的返回值类型是Object。
需要强制转换。

如果操作未完成,get() 将中止。
首先使用 isDone() 进行检查。

如何处理异常?未创建 try-catch。
实际使用中需要额外添加。

您可以尝试为 Runnable 添加长时间睡眠模式吗?确保执行顺序保持不变。