17. Goroutine 的并发与超时控制

本文探讨了Goroutine的并发控制,包括如何实现按序返回,以及超时控制的重要性。在按序返回中,利用多个channel的顺序接收实现。对于超时控制,提出通过设置超时函数配合goroutine解决可能的阻塞问题。此外,还介绍了使用buffered channel进行并发限制,以限制同时运行的goroutine数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Goroutine 的并发与超时控制

并发

package main

import (
    "fmt"
    "time"
)

func run(task_id, sleeptime int, ch chan string) {
   
    time.Sleep(time.Duration(sleeptime) * time.Second)
    ch <- fmt.Sprintf("task id %d , sleep %d second", task_id, sleeptime)
    return
}

func main() {
   
    input := []int{
   3, 2, 1}
    ch := make(chan string)
    startTime := time.Now()
    fmt.Println("Multirun start")
    for i, sleeptime := range input {
   
        go run(i, sleeptime, ch)
    }

    for range input {
   
        fmt.Println(<-ch)
    }

    endTime := time.Now()
    fmt.Printf("Multissh finished. Process time %s. Number of tasks is %d", endTime.Sub(startTime), len(input))
}
Multirun start
task id 2 , sleep 1 second
task id 1 , sleep 2 second
task id 0 , sleep 3 second
Multissh finished. Process time 3s. Number of tasks is 3
Program exited.

按序返回

package main

import (
    "fmt"
    "time"
)

func run(task_id, sleeptime int, ch chan string) {
   

    time.Sleep(time
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值