Java 里的 Thread 和 Go 里的 Goroutine,看起来都是用来做并发的东西,但真正往底层看,两者背后的运行方式完全不同。从传统 Java 平台线程、线程池,到 Go Runtime 调度 Goroutine,再到 Java 21 带来的虚拟线程,线程和并发任务之间的关系正在发生变化。本文不只比较 Thread 和 Goroutine 的概念,而是顺着“谁创建、谁调度、谁负责等待 I/O”这条线,看看 Java 和 Go 到底是怎么把大量并发任务跑起来的。
阅读全文 →RAG:不是给模型"喂资料"这么简单
很多人第一次接触 RAG,理解就是“从知识库里搜点资料给模型”。但真正做起来才发现,从 Chunk、Embedding、Hybrid Search 到 Rerank,每一步都会影响最终效果。本文从完整链路出发,聊聊 RAG 中那些容易被忽略的细节,以及我对 Agentic RAG、GraphRAG 等方向的一些理解。
当多个线程撞进同一扇门:我终于看懂了 Synchronized
最开始,我对 Synchronized 的理解只有一句话:加把锁,多个线程排队执行。后来真正往 JVM 里面挖,才发现这个看似简单的关键字背后,竟然牵扯出了 Monitor、对象头、happens-before、CAS 和 JIT 锁优化。于是顺着这把锁一路往下看,才慢慢明白 Java 到底是怎么把并发这件麻烦事管住的。