小编ma3*_*a3x的帖子

并发:限制goroutines无法按预期工作

我目前正在研究搜索引擎项目。为了提高搜寻速度,我每次访问链接时都使用一个goroutine。但是我遇到了两个问题,这使我感到奇怪!

第一个是代码示例:

package main

import "fmt"
import "sync"
import "time"

type test struct {
    running int
    max     int
    mu      sync.Mutex
}

func main() {
    t := &test{max: 1000}
    t.start()
}

func (t *test) start() {
    for {
        if t.running >= t.max {
            time.Sleep(200 * time.Millisecond)
            continue
        }
        go t.visit()
    }
}

func (t *test) visit() {
    t.inc()
    defer t.dec()
    fmt.Println("visit called")
    fmt.Printf("running: %d, max: %d\n", t.running, t.max)
    fmt.Println()
    time.Sleep(time.Second)
}

func (t *test) inc() {
    t.mu.Lock()
    t.running++
    t.mu.Unlock()
}
func …
Run Code Online (Sandbox Code Playgroud)

concurrency go goroutine

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

标签 统计

concurrency ×1

go ×1

goroutine ×1