CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
多语言后端入门/课时/并发模型
RawBlame
课时目录12 节

多语言后端入门

  1. 01多语言后端概览
  2. 02Go 入门
  3. 03Rust 入门
  4. 04C# 入门
  5. 05Ruby 入门
  6. 06语言对比
  7. 07并发模型
  8. 08包管理与工具链
  9. 09与 Java 互操作
  10. 10如何选择语言
  11. 11多语言微服务
  12. 12综合练习

并发模型

线程/协程/actor;对照 java-fundamentals。

30 分钟

并发模型

后端「快」往往来自 并行处理请求,而非单行代码更快。各语言对并发的抽象不同:OS 线程、协程、Actor、事件循环——理解模型,才能 debug 死锁、泄漏与 tail latency。本节对照 java-fundamentals 线程世界与 Go/Rust/Node 的做法。

学习目标

  • 区分线程、协程(goroutine/fiber)、Actor、事件循环
  • 说清 Java 平台线程、虚拟线程与 Go goroutine 的异同直觉
  • 知道跨语言服务里 并发在进程内,一致性在边界外

四种常见模型

1. OS 线程 + 锁(经典 Java)

ExecutorService pool = Executors.newFixedThreadPool(32);
pool.submit(() -> callExternalApi());

java.util.concurrent、 synchronized、 ReentrantLock。虚拟线程(Project Loom)降低阻塞 I/O 的线程成本,写法仍像同步代码。

2. 协程 / 轻量任务(Go)

go handleRequest(conn)  // 成千上万个 goroutine

M:N 调度,channel 传递数据。注意:不要阻塞在无人消费的 channel 上。

3. async/await + 事件循环(Node、Rust Tokio、C#)

node-async:单线程处理 I/O 回调,CPU 重活要放 Worker 或另起服务。Rust/C# 的 async 是 状态机 + 线程池,语义接近但无 GIL 问题。

4. Actor(Akka、Erlang 传统、部分 Orleans)

邮箱 + 单线程处理消息,避免共享可变状态。Java 侧 Akka/Pekko;与 spring-cloud-essentials 微服务 进程级隔离 可组合:Actor 进程内,Service 进程间。

对照表

Java(现代)GoNode.jsRust async
默认单位Thread / Virtual Threadgoroutinecallback/PromiseFuture
通信共享内存+JUCchannel事件、消息channel/mpsc
阻塞 I/OVT 友好阻塞仍占 OS 线程忌 sync CPU.await
调试jstack、JFRpprof, trace--inspecttokio-console

跨语言微服务里的「并发」

单服务内选模型;服务间用 HTTP/gRPC/消息队列。不要在 Java 里用共享内存去「优化」本该走 grpc-streaming 的流式场景。

Python python-fundamentals:asyncio 适合 I/O;CPU 密集用 多进程 绕 GIL。

常见反模式

  • 在 Node 里做 大 JSON 同步 parse 卡死事件循环
  • Go 里 无界 spawn goroutine 打爆内存
  • Java 里 线程池过小 导致排队,过大导致上下文切换
  • 混用锁顺序不一致 → 死锁

练习

  • 画一张图:一个 HTTP 请求在 Java 线程池 vs Go goroutine 中的生命周期
  • 读 node-async,写一句「何时 Node 并发不够,要拆服务或换语言」
  • 搜 Java Virtual Thread 官方文档,对比 goroutine 调度一句

小结

线程、协程、Actor、事件循环——选模型匹配 I/O/CPU 比例;跨语言靠网络边界,不靠共享内存。 下一课包管理与工具链。

加载本节练习…
← 上一课语言对比下一课 →包管理与工具链