小编Vim*_*shS的帖子

为什么所有的goroutine都睡着了 - 僵局.识别瓶颈

package main

import (
    "fmt"
    "runtime"
    "sync"
    "time"
)

func main() {
    intInputChan := make(chan int, 50)
    var wg sync.WaitGroup
    for i := 0; i < 3; i++ {
        wg.Add(1)
        go worker(intInputChan, wg)
    }
    for i := 1; i < 51; i++ {
        fmt.Printf("Inputs. %d \n", i)
        intInputChan <- i
    }
    close(intInputChan)
    wg.Wait()
    fmt.Println("Existing Main App... ")
    panic("---------------")
}

func worker(input chan int, wg sync.WaitGroup) {
    defer func() {
        fmt.Println("Executing defer..")
        wg.Done()
    }()

    for {
        select {
        case intVal, ok …
Run Code Online (Sandbox Code Playgroud)

channel go

3
推荐指数
1
解决办法
809
查看次数

为什么并发代码需要更多时间来执行

我有一个名为linearize的函数...我正试图加快执行速度,但却惊讶地发现它变慢了.我错过了什么或搞砸了基本面......

根据我的理解,事情应该改善..

谢谢,

package main

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

var rgb []float64

func linearizeWithWg(v float64, idx int, wg *sync.WaitGroup) {
    defer wg.Done()

    if v <= 0.04045 {
        rgb[idx] = v / 12.92
    } else {
        rgb[idx] = math.Pow((v+0.055)/1.055, 2.4)
    }
}

func linearizeWithGoR(v float64) float64 {
    res := make(chan float64)

    go func(input float64) {
        if input <= 0.04045 {
            res <- input / 12.92
        } else {
            res <- math.Pow((input+0.055)/1.055, 2.4)
        }
    }(v)
    return <-res
}

func …
Run Code Online (Sandbox Code Playgroud)

concurrency multithreading go

-2
推荐指数
1
解决办法
97
查看次数

标签 统计

go ×2

channel ×1

concurrency ×1

multithreading ×1