Go并发编程核心的CSP理论的核心概念只有一个:同步通信。   —— Go语言高级编程

写这篇文章的目的,就是想了解 Go语言并发的设计思路,想法,精髓,体验语言的美妙。

《Go语言圣经》中给出的Go语言的基因图谱,介绍了对Go语言产生影响的语言。

1. CSP并发模型

Go语言标志性的并发编程特性,来自于贝尔实验室1978年发表的关于并发研究的基础文献:顺序通信进程(communicating sequential processes,缩写为CSP)。

在最初的CSP论文中,程序只是一组没有中间共享状态的平行运行的处理过程,它们之间使用管道进行通信和控制同步。

CSP并发模型最经典的实际应用是爱立信发明的Erlang编程语言。

 

2. Newsqueak语言

这门语言是Rob Pick发明的squeak语言的第二代,是他用于实践CSP并发编程模型的战场。

Squeak语言是一个提供鼠标和键盘事件处理的编程语言,它的管道(channel)是静态创建的。

改进版的Newsqueak语言提供了类似C语言语句的表达式语法、类似Pascal语言的推导语法,它是一个带自动垃圾回收的纯函数语言。

在Newsqueak中,管道是动态创建的,可以保存在变量中。

我们通过“素数筛法”来理解Newsqueak语法对Go语言产生的影响,其原理如图:

通过一个又一个的管道传输数据、过滤数据,最后得到的就是一个又一个的素数。

 

3. Alef语言

Alef语言对线程和进程的并发体都提供了支持,它们通过管道进行通讯。

不过由于Alef缺乏内存自动回收机制,导致并发体的内存资源管理异常复杂。

可以将Alef理解成增强并发的C语言。

 

4. Limbo语言

它是运行在小型计算机上的分布式应用的编程语言,它支持模块化编程,编译期和运行时的强类型检查。

它其实已经具备了Go语言的雏形。

 

可以看到,Go语言的并发,其实也是在前人的基础上一步一步优化过来的。

 

2、 生产者消费者模型

并发编程中最常见的例子就是生产者消费者模式,该模式主要通过平衡生产线程和消费线程的工作能力来提高整体处理数据的速度。

上面是一个生产者消费者模型,有两个生产者,分别生产3和5的倍数,消费者打印输出。

 

3、 发布订阅模型

发布订阅模型(publish-and-subscribe)模型,通常被简写为pub/sub模型。

在这个模型中,消息的生产者是发布者,消息消费者是订阅者,生产者和消费者是M:N的关系。

接着就是主程序:

 

【Go】Go语言并发设计思路及来源
Tagged on:
0 0 投票数
Article Rating
订阅评论
提醒

0 评论
内联反馈
查看所有评论