美文网首页
golang协程与无缓冲信道

golang协程与无缓冲信道

作者: 飞翔的橙子哥 | 来源:发表于2020-03-14 09:34 被阅读0次
package main

import (
    "fmt"
    "math"
    "time"
)

var res = make(chan float64)

func timeCost(start time.Time) {
    tc := time.Since(start)
    fmt.Printf("time cost = %v\n", tc)
}

func calculate(n int) {
    defer timeCost(time.Now())
    pi := 0.0
    for i := 0; i < n; i++ {
        var k = float64(i)
        pi += 1.0 / math.Pow(16, k) * (4.0/(8.0*k+1.0) - 2.0/(8.0*k+4.0) - 1.0/(8.0*k+5.0) - 1.0/(8.0*k+6.0))
    }
    res <- pi
}

func main() {
    defer func() {
        fmt.Println("Total cost in main")
        timeCost(time.Now())
    }()
    startT := time.Now()
    count := 50

    for i := 0; i < count; i++ {
        go calculate(20000 + i*1000)
        // calculate(20000 + i*100)
    }

    for i := 0; i < count; i++ {
        <-res
    }
    fmt.Println("main ends")
    tc := time.Since(startT)
    fmt.Printf("time cost = %v\n", tc)
}

对于计算密集型任务,不宜开太多协程

相关文章

  • golang协程与无缓冲信道

    对于计算密集型任务,不宜开太多协程

  • Go基础语法(十)

    缓冲信道 之前看到的都是无缓冲信道,无缓冲信道的发送和接收过程是阻塞的。我们还可以创建一个有缓冲(Buffer)的...

  • chan

    1.主协程只负责调用子协程,但是不会被子协程阻塞 2.在主协程中,无缓冲的chan需要输入输出成对出现,否则会死锁...

  • 浅谈GoLang协程

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

  • Go语言无缓冲通道创建协程池

    Go语言无缓冲通道创建协程池 这些协程池通常用于并发执行一组任务,最终组合起来完成某个功能。在这种情况下,使用无缓...

  • 知识分享之Golang——协程与线程的简单对比

    知识分享之Golang——协程与线程的简单对比 背景 知识分享之Golang篇是我在日常使用Golang时学习到的...

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

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

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

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

  • Go协程、并发、信道

    Go 通过协程实现并发,协程之间靠信道通信 1.1 并发、并行是什么? 并行其实很好理解,就是同时执行的意思,在某...

  • Golang:协程

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

网友评论

      本文标题:golang协程与无缓冲信道

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