美文网首页
golang控制协程(grouting)数量

golang控制协程(grouting)数量

作者: 郭青耀 | 来源:发表于2020-10-24 15:19 被阅读0次

方法一:使用带有缓冲的channel 的特性

  • 直到缓冲区被填满后,写端才会阻塞。
  • 缓冲区被读空,读端才会阻塞。
package main
import "fmt"

func main() {
    loopMax := 100
    limitGrouting := 10
    ch := make(chan struct{}, limitGrouting)
    defer close(ch)
    for i := 0; i < loopMax; i++ {
        go func(a int) {
            fmt.Println("hello ", a)
            ch <- struct{}{}
        }(i)
    }
    for i := 0; i < loopMax; i++ {
        <-ch
    }
}

代码中channel数据结构为什么定义struct ?
因为空结构体变量的内存占用大小为0,而bool类型内存占用大小为1,这样可以更加最大化利用我们服务器的内存空间。

方法二:使用sync.WaitGroup

WaitGroup 对象内部有一个计数器,最初从0开始,它有三个方法:Add(), Done(), Wait() 用来控制计数器的数量。

package main

import (
    "fmt"
    "sync"
)

func main() {
    limitGrouting := 10
    wg := sync.WaitGroup{}

    for i := 0; i < limitGrouting; i++ {
        wg.Add(1)
        go func(a int) {
            fmt.Println("hello ", a)
            wg.Done()
        }(i)
    }
    wg.Wait()
}

相关文章

  • golang控制协程(grouting)数量

    方法一:使用带有缓冲的channel 的特性 直到缓冲区被填满后,写端才会阻塞。 缓冲区被读空,读端才会阻塞。 代...

  • golang中最大协程数的限制(线程)

    golang中最大协程数的限制 golang中有最大协程数的限制吗?如果有的话,是通过什么参数控制呢?还是通过每个...

  • 浅谈GoLang协程

    GoLang协程 学习golang也有一段时间了,这里讲一下自己对golang协程的使用理解,golang很多人都...

  • go 中 限制 goroutine 数量以及使用协程池

    需要使用协程池? Golang 开发需要协程池吗[https://www.zhihu.com/question/3...

  • Golang:协程

    协程(Goroutine)是与其他函数或方法同时运行的函数或方法。可以认为它是轻量级的线程。与线程相比,创建 Go...

  • 协程--golang

    协程(goroutine) 是轻量级的执行线程,由关键字go定义 一个例子 特别注意:如果没有time.Sleep...

  • 协程的使用

    Golang原生支持协程。只需要在前面加上go 就可以启动协程,比如说: package mainimport("...

  • Golang源码之Goroutine

    原文来自博客园作者: q303248153 Golang最大的特色可以说是协程(goroutine)了, 协程让本...

  • Go语言学习笔记七(并发编程)

    协程机制 Golang 线程和协程的区别 备注:需要区分进程、线程(内核级线程)、协程(用户级线程)三个概念。 进...

  • 协程的概念与应用2020-05-04

    1、协程常在用户态执行,协程间切换由用户控制,本质是用户控制的一堆函数 2、协程常用户IO密集型场景,因为协程间绝...

网友评论

      本文标题:golang控制协程(grouting)数量

      本文链接:https://www.haomeiwen.com/subject/nmgimktx.html