后端开发|Golang

golang 如何并发

golang
后端开发-Golang
中小学校网站源码,ubuntu无图标消失,爬虫抓鸡教程,php搭建网站需要购买服务器吗,feed网页 seolzw
Go的CSP并发模型
网上图书馆源码,vscode做迪士尼网页,ubuntu文件上传,tomcat停止很慢,sqlite编辑器电脑,楼房冬天有爬虫怎么办,php 判断 手机端,金华专业seo系统,php 网站怎么监控报警,易语言定时刷新网页,帝国cms手机模板下载lzw
Go实现了两种并发形式。第一种是大家普遍认知的:多线程共享内存。其实就是Java或者C++等语言中的多线程开发。
淘宝客推广平台源码,手机vscode 中文,命令行清空回收站ubuntu,tomcat性能下降,sqlite查询元数据,免插件手机版视频播放器,2019最好用前端开发框架,使用python爬虫来算命,php 视频流,张帆 seo 深圳,拍卖网站源码 php,网页源码怎么生成网页,ecshop 微商城 模板lzw
另外一种是Go语言特有的,也是Go语言推荐的:CSP(communicating sequential processes)并发模型。 (推荐学习:go)

CSP并发模型是在1970年左右提出的概念,属于比较新的概念,不同于传统的多线程通过共享内存来通信,CSP讲究的是“以通信的方式来共享内存”。

请记住下面这句话:

Do not communicate by sharing memory; instead, share memory by communicating.“不要以共享内存的方式来通信,相反,要通过通信来共享内存。”

普通的线程并发模型,就是像Java、C++、或者Python,他们线程间通信都是通过共享内存的方式来进行的。

非常典型的方式就是,在访问共享数据(例如数组、Map、或者某个结构体或对象)的时候,通过锁来访问,因此,在很多时候,衍生出一种方便操作的数据结构,叫做“线程安全的数据结构”。

例如Java提供的包”java.util.concurrent”中的数据结构。Go中也实现了传统的线程并发模型。

Go的CSP并发模型,是通过goroutine和channel来实现的。

goroutine 是Go语言中并发的执行单位。有点抽象,其实就是和传统概念上的”线程“类似,可以理解为”线程“。

channel是Go语言中各个并发结构体(goroutine)之前的通信机制。 通俗的讲,就是各个goroutine之间通信的”管道“,有点类似于Linux中的管道。

生成一个goroutine的方式非常的简单:Go一下,就生成了。

go f();

通信机制channel也很方便,传数据用channel <- data,取数据用<-channel。

在通信过程中,传数据channel <- data和取数据<-channel必然会成对出现,因为这边传,那边取,两个goroutine之间才会实现通信。

而且不管传还是取,必阻塞,直到另外的goroutine传或者取为止。

有两个goroutine,其中一个发起了向channel中发起了传值操作。(goroutine为矩形,channel为箭头)