代码拉取完成,页面将自动刷新
package main
import (
"fmt"
"math"
)
type Request struct {
n int
replyc chan float64
}
type binOp func(int) float64
func run(op binOp, r *Request) {
r.replyc <- op(r.n)
}
func server(op binOp, ch chan *Request, quit chan bool) {
for {
select {
case r := <-ch:
go run(op, r)
case <-quit:
return
}
}
}
func startServer(op binOp) (chan *Request, chan bool) {
chanR := make(chan *Request)
quit := make(chan bool)
go server(op, chanR, quit)
return chanR, quit
}
func main() {
const N = 100
var reqs [N]Request
calcPi := func(n int) (res float64) {
for i := 0; i < n; i++ {
f := float64(i)
sub := 4.0 * math.Pow(-1, f) / (2.0*f + 1.0)
res += sub
}
return res
}
chanR, quit := startServer(calcPi)
for i := 0; i < N; i++ {
req := &reqs[i]
req.n = i + N
req.replyc = make(chan float64)
chanR <- req
}
fmt.Println("print pi")
for i := N - 1; i >= 0; i-- {
fmt.Println(i+N, '-', <-reqs[i].replyc)
}
quit <- true
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。