Java并发 -- Thread-Per-Message模式
概述
Thread-Per-Message模式:为每个任务分配一个独立的线程
Thread
1 | // 处理请求 |
- Java中的线程是一个重量级的对象,创建成本很高(创建过程比较耗时 + 线程占用的内存也较大)
- 所以在Java中为每个请求创建一个新的线程并不适合高并发场景
- 语言、工具和框架本身是帮助我们更敏捷地实现方案的
- 而Thread-Per-Message模式是最简单的分工方案,只是Java无法有效支持
- Java线程和操作系统线程是一一对应的,Java将Java线程的调度权完全委托给操作系统
- 操作系统在线程调度方面非常成熟、稳定和可靠,但创建线程的成本很高
- 为此,JUC提供了线程池等工具类
- 业界还有另外一种解决方案,叫作_轻量级线程_
- 在Go语言,Lua语言里的协程,本质上是一种轻量级线程
- 轻量级线程的创建成本很低,基本上和创建一个普通对象的成本类似
- 创建速度和内存占用相比操作系统线程至少有一个数量级的提升
- 因此,基于轻量级线程实现Thread-Per-Message模式是没有问题的
- OpenJdk的Loom项目,是为了解决Java语言的轻量级线程问题,Loom项目中的轻量级线程叫作Fiber
- Thread-Per-Message模式在Java领域并不知名
- 根本原因:Java线程是一个重量级对象,线程的创建成本太高,在高并发领域,基本不具备可行性
- Java在未来一定会提供轻量级线程
参考资料
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.