每日一博 | Go 中的 channel 与 Java BlockingQueue 的本质区别
前言 最近在实现两个需求,由于两者之间并没有依赖关系,所以想利用队列进行解耦;但在 Go 的标准库中并没有现成可用并且并发安全的数据结构;但 Go 提供了一个更加优雅的解决方案,那就是 channel。 channel 应用 Go 与 Java 的一个很大的区别就是并发模型不同,Go 采用的是 CSP(Communicating sequential processes) 模型;用 Go 官方的说法: Do not communicate by sharing memory; instead, share memory by communicating. 翻译过来就是:不用使用共享内存来通信,而是用通信来共享内存。 而这里所提到的通信,在 Go 里就是指代的 channel。 只讲概念并不能快速的理解与应用,所以接下来会结合几个实际案例更方便理解。 futrue task Go 官方没有提供类似于 Java 的 FutureTask 支持: public static void main(String[] args) throws InterruptedException, Execu...

