@axex
一个 CPU connection 一个或者两个 goroutine? 为什么?
@sujin190
看下这个简单的 worker pool
”’
package main
import (
“fmt”
“time”
)
//睡 1 秒,然后把收到的数据乘 2 返回
func worker(id int, job <-chan int, ret chan<- int) {
for j := range job {
time.Sleep(time.Second)
ret <- j * 2
}
}
func main() {
//1000 个工作
const JOBNUM = 1000
jobchan := make(chan int, JOBNUM)
retchan := make(chan int, JOBNUM)
//开 1000 个 goroutine
for w := 1; w <= 1000; w++ {
go worker(w, jobchan, retchan)
}
//分发 1000 个工作
for j := 1; j <= JOBNUM; j++ {
jobchan <- j
}
close(jobchan)
//接受结果
for r := 1; r <= JOBNUM; r++ {
<-retchan
}
}
”’
如果说”每个 cpu 核心同时刻只能执行一个计算”
我的电脑有 12 核心。那么按理说我同时只能处理 12 个 goroutine,即 12 个 worker 不是吗
可实际上这 1000 个 goroutine 处理 1000 个工作(睡 1 秒),
总共只用了 1 秒, 说明这 1000 个 goroutine 是同时并行执行的
而不是每次并行处理 12 个,一共要睡( 1000/12 )= 83 秒
肯定是我哪里理解不对 望指点