八股训练营第 36 天 | 为什么要有线程池?说一说线程池有哪些常用参数?BIO、NIO、AIO 的区别?

为什么要有线程池?

  1. 资源管理:在多线程中,每个线程都需要占用 CPU 资源和内存。如果不加以限制地创建线程,会导致系统资源耗尽,引发系统崩溃。而线程池可以限制并控制线程的数量,从而避免此问题。
  2. 提高性能:线程池可以复用线程,减少线程创建和销毁的开销。
  3. 任务排队:线程池通过任务队列和工作线程结合,合理分配线程任务。保证任务按照一定的顺序执行。避免线程竞争和冲突。
  4. 统一管理:线程池提供了统一的线程管理方式。可以对线程进行监控、调度和管理。

说一说线程池有哪些常用参数?

  1. corePoolSize:线程池中的核心线程数量。
  2. maximumPoolSize:线程池中的最大线程数量。
  3. keepAliveTime:非核心线程的空闲时间超过 keepAliveTime 后会被回收。
  4. timeUnit:表示 keepAliveTime 的时间单位,如秒、分钟。
  5. workQueue:线程池内部的阻塞队列。用于存放待执行的任务。
  6. threadFactory:线程池创建线程的工厂方法。通常用于命名线程,以便排查问题。
  7. RejectionExecutionHandle:拒绝策略。当线程池的任务超出最大线程数量时,会执行的策略。

BIO、NIO、AIO 的区别?

  1. BIO:阻塞式的 I/O 模型。一个线程执行 I/O 请求后。如果数据还没准备好。线程会陷入阻塞状态。BIO 适合并发连接数少、比较固定的场景。
  2. NIO:非阻塞式的 I/O 模型。NIO 使用缓冲区和通道来处理数据。提高了 I/O 的效率。适合并发连接数多的场景。
  3. AIO:异步的 I/O 模型。线程执行 I/O 请求后,可以继续去执行其他任务。当数据准备完毕后,由操作系统通知线程。AIO 适合并发连接数多,希望避免 I/O 操作阻塞线程的场景。

BIO 是阻塞 I/O,一个连接一个线程,适合连接数少的场景;
NIO 采用多路复用,一个线程可以处理多个连接,适合高并发,Netty 基于此实现;
AIO 是真正的异步 I/O,操作系统完成后通知应用线程,性能最好,但实际生产应用较少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值