当前位置: 首页 > 网络应用技术

Goroutine是无限的?如何限制Goroutine的数量?

时间:2023-03-06 16:21:49 网络应用技术

  首先,我们都知道Goroutine具有以下两个特征:

  Goroutine真的可以在没有限制的情况下打开吗?如果您制作服务器或某些高繁殖场景,可以随意打开Goroutine而不控制其生命周期的控制?这些Goroutine中的大多数都会被自己销毁。

  让我们看以下示例:

  结果,操作系统通过信号结束了过程。

  可以看出,如果我们迅速打开Goroutine(非控制的Goroutine数量),我们将在短时间内占据操作系统(CPU,内存,文件描述符等)的资源。

  这些资源实际上是由所有用户模式共享的资源,因此大量的Goroutine打开了一个事件,即最终问题不仅是本身,而且还会影响其他操作程序。

  总而言之,当我们在正常开发中编写代码时,我们需要注意代码中启用Goroutine的数量,以及是否可以打开以控制的Goroutine是否必须注意该问题。

  结果:

  从结果来看,该程序并未崩溃,而是按步骤顺序进行的,并且GO的数量在3(4是因为有一个主要的高鲁丁)控制,该怎么样?

  在这里,我们使用缓冲区到3频道。在写入渠道的过程中,它实际上仅限于速度:

  周期中的速度,因为此速度决定了GO的速度,并且GO的最终速度取决于功能的速度。这样,我们可以保证在同一时间内运行的Goroutine数量与缓冲区的数量,从而达到有限的效果。

  但是,此代码中存在一个小问题,也就是说,如果我们使GO_CNT的数量较小,则该游戏的结果将是不正确的。

  结果:

  您会看到某些Goroutine没有打印,因为Main打开了所有Goroutine后,Main直接退出。我们知道主要过程退出,所有Goroutine都将结束,这会导致一些Goroutine在执行前退出。

  显然,如果您简单地使用它,您将无法控制Goroutine的数量,最终结果仍然会崩溃。

  结果:

  这样,我们的过程不会导致资源爆炸和崩溃。运行GO的数量控制缓冲区3的范围。

  执行过程大致如下。实际上,这是任务交付和执行的业务分离。将消息发布,可以设置输入sendtask的频率,并且还可以设置Goroutine的数量。输出(消耗)。使控制器更加灵活。这也是许多GO -Frame工人的初始设计思想。

  如下所示:

  以上是我今天将与您分享的内容。欢迎更多高质量的技术文章遵循公共帐户[GO键盘人]。