Rust 笔记: Rust 写一个线程池
这个文章是通过如下两篇文章总结来的:
服务器的演化
总体是: 单线程服务器->多进程服务器 -> 多线程服务器
如何提高吞吐量
提高吞吐量有如下办法:
- 使用线程池
- 使用 Fork/Join 模型中的其他方式(轻量级线程/多进程/线程池...)
- 单线程异步 I/O 模型
由于多进程处理的时候, 进程创建的开销相比线程大很多, 因此准备使用多线程方式处理. 多线程处理时, 也不能无限制地创建线程, 因为始终在创建时都有开销. 一个更好的办法是, 通过一个线程池, 有任务提交后, 自动创建线程, 然后将这些已创建的线程进行复用.
线程池的工作流程如下:
- 当程序收到一个任务, 它会将任务分配给线程池中某个线程
- 该线程处理这个任务, 线程池中的其他线程则在等待更多任务
- 当该线程处理完任务后, 它会重新被放入线程池并标记为可用
线程池简介
翻译自TRPL 的这里.
线程池是一组已经生成的线程, 它们等待并处理被提交到线程池的任务. 任务完成后, 线程再次回到到线程池, 等待执行新任务. 线程池的优势在于并发处理请求, 提高吞吐量.