Goroutine的用途

在现实世界中使用,特别是你有多个服务器,就云部署而言。

现在我们谈论很多数据库,有时候甚至是微服务。

我们谈论有多个数据库,有很多的复制品专门用于只读,也有写服务器和写数据库,可以做读和写。

这是一个常见的情形,一些API仅仅和只读服务器对话,一些和读写服务器对话,。

除了这个还有其它的案例,例如微服务。

一些微服务与其它的微服务交谈。你可以在那里使用goroutine。

你可以发起一个线程,它可以与其它的微服务交流,从那里拉取数据。

另一个例子,你可能有三个不同的API端点。你可以从所有的端点中获取数据,

你可以在不同的线程中运行不同的方法。

我们可以复现一个场景。

请求网页并且得到一个状态码,我们可以ping到不同的API,并且可以。

通常,大部分情况下你并不像这样创建一个变量。你将创建一个指针,因为你要传递一个引用。

WaitGroup是一个改变版本的,或者是一个高级的经过强化的Time.sleep。

当你使用WaitGroup时,你有3个工作要做。

一旦Goroutine被创建,Add,

将不停止方法,直到它返回。

有5个Goroutines,除非它们返回,我将不停止它们。

一旦你的工作完成,你发送的完成了。

是你的责任来调用done。

sync.WaitGroup

注意,通常这些是指针。

wg.Wait通常总是在主要方法的末尾,它仅仅负责不允许主方法完成。

不允许继续并且完成,因为有其它的WaitGroup没有给我一个信号。

WaitGroup的另一个部分。

defer关键字

是你的任务来传递一个done的signal。

这个WaitGroup的责任是。

Add的责任是持续的增加。

Mutex

先进入到这样一个情境。

在将来的某个时候,我已经接到了这个端点。

我们需要改变自己的思维模式,我尝试在这里创建的所有情形。

当创建Goroutine的时候,这些被Go的runtime管理。

如果线程或者是Goroutine被Runtime管理,谁去管理内存空间上的锁?

仅仅发起了一个Goroutine。

但是可能有5个不同的Goroutine一起工作。

所有同时尝试写一个单一内存,在我们这里应该有一些责任来,我们应该避免这个。

mutex是一个互斥锁(mutual exclusion lock)。

mutex的0值是一个unlock mutex。

mutex的角色是给你提供一个内存的锁,也有一个RWMutex。

Mutex的Lock和Unlock。

这个将如何工作?

无论你在内存中展示操作的是什么,读和写。

在更大的应用中,你将看到有一个变量,或者是数据库被多个这样的Goroutine写。

在那种情况下,这是非常非常必要的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值