GO 并发处理

luckyFang 2020年10月26日 178次浏览

Goroutine

Go 是一个天生支持并发语言

go func(){}

这样就开启了一个协程

何为协程?

协程可以理解为轻量的线程。

潜在危害

虽然我们可以用go很轻松实现并发,但是万事皆有度,并发也是如此。虽然每个Goroutine的内存占用大概为2KB,但是并不意味着我们可以无限并发。
所以在必要时我们需要进行并发控制,从而合理利用资源。

示例代码

package main

import (
	"fmt"
	"time"
)

/**
	@author luckyFang
	@date 2020 10 26
	@desc golang 并发处理
 */

func main() {
	channel()
}

func channel() {
	count := 50
	sum := 1000

	// 任务并发 chan
	ch := make(chan int , count)
	defer close(ch)

	for i := 0; i < sum; i++ {
		ch <- 0
		go func(i int) {
			time.Sleep(time.Duration(1)*time.Second)
			fmt.Println(i)
			<-ch
		}(i)
	}
}