Go 协程计算圆周率

 基础语法  2020-12-05  admin  1988  2683

Go 协程计算圆周率

// Concurrent computation of pi.
// See https://goo.gl/la6Kli.
//
// This demonstrates Go's ability to handle
// large numbers of concurrent processes.
// It is an unreasonable way to calculate pi.
package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(pi(5000))
}

// pi launches n goroutines to compute an
// approximation of pi.
func pi(n int) float64 {
	ch := make(chan float64)
	for k := 0; k <= n; k++ {
		go term(ch, float64(k))
	}
	f := 0.0
	for k := 0; k <= n; k++ {
		f += <-ch
	}
	return f
}

func term(ch chan float64, k float64) {
	ch <- 4 * math.Pow(-1, k) / (2*k + 1)
}

计算结果:  3.141792613595792

如果文章对您有帮助,点击下方的广告,支持一下作者吧!

转载必须注明出处:

Go 协程计算圆周率 —— code.cent123.com

相关推荐


在go协程中共享资源需要加锁处理

在go协程中共享资源需要加锁处理packagemain import( &quot;fmt&quot; &quot;sync&quot; ) //创建一个互斥锁 varmutex=&amp;sync.Mutex{} //定义一个共享资源 varsharedResource=0 //定义一个等待组 varwg=sync.WaitGroup{} //定义一

go WaitGroup 的使用方法

在 Go 中,sync 包下的 WaitGroup 能有助于我们控制协程之间的同步。当需要等待一组协程都执行完各自任务后,才能继续后续逻辑。这种场景,就非常适合使用它。WaitGroup 提供三个 API。Add(delta int) 函数提供了 WaitGroup 的任务计数,delta 的值可以为正也可以为负,通常在添加任务时使用。Done() 函数其实就是 Add(-1),在任务完成时调用。

go 协程管理及传参处理

Go语言中的goroutine虽然相对于系统线程来说比较轻量级(初始栈大小仅2KB),(并且支持动态扩容),而正常采用java,c++等语言启用的线程一般都是内核态的占用的内存资源一般在4m左右,而假设我们的服务器CPU内存为4G,那么很明显才用的内核态线程的并发总数量也就是1024个,相反查看一下Go语言的协程则可以达到4*1024*1024/2=200w.这么一看就明白了为什么Go语言天生支持

go 协程示例:获取指定范围的质数

go 协程示例:获取指定范围的质数