当前位置: 首页 > news >正文

Golang多goroutine求解1000万和1亿以内的素数

        使用单个goroutine求解1000万以内的素数。

package mainimport ("fmt""math""time"
)func IsPrime(n int) bool {if n <= 1 {return false}if n == 2 {return true}if n%2 == 0 {return false}sqrtN := int(math.Sqrt(float64(n)))for i := 3; i <= sqrtN; i += 2 {if n%i == 0 {return false}}return true
}
func main() {start := time.Now()for i := 0; i < 10000000; i++ {if IsPrime(i) {println(i)}}elapsed := time.Since(start).Seconds()fmt.Printf("end:%.3f", elapsed)
}

所需要的时间:38.332

2000个goroutine同时求解1000万以内的素数。

package mainimport ("fmt""math""time"
)func initChan(intchan chan int, num int) {for i := 0; i < num; i++ {intchan <- i}close(intchan)
}
func IsPrime(n int) bool {if n <= 1 {return false}if n == 2 {return true}if n%2 == 0 {return false}sqrtN := int(math.Sqrt(float64(n)))for i := 3; i <= sqrtN; i += 2 {if n%i == 0 {return false}}return true
}
func savePrime(intchan chan int, primechan chan int, exitchan chan bool) {for i := range intchan { //如果intchan没有关闭,那么就会永远阻塞if IsPrime(i) {primechan <- i}}exitchan <- true
}
func main() {start := time.Now()goNum := 2000primeNum := 10000000var intchan chan int = make(chan int, primeNum)var primechan chan int = make(chan int, primeNum)var exitchan chan bool = make(chan bool, goNum)go initChan(intchan, primeNum)for i := 0; i < goNum; i++ {go savePrime(intchan, primechan, exitchan)}go func() {for i := 0; i < goNum; i++ {<-exitchan}close(primechan) //执行完goNum个goroutine之后,不会再写入了,必须关闭}()for {v, ok := <-primechan //如果primechan不关闭,这里就会永远阻塞if !ok {break}println(v)}elapsed := time.Since(start).Seconds()fmt.Printf("end:%.3f", elapsed)
}

所需要的时间:26.374s。

可以发现当数据量较小的情况下,多goroutine的并发优势并没有比单goroutine有多少的提升。

当数据量变为1亿的时候,即使是先运行单goroutine的程序,后运行多goroutine的程序,多goroutine的程序的输出也慢慢的超过了单goroutine。

多goroutine已经打印到了

单goroutine还在

最后的时间差距也非常巨大:

多goroutine(10000):344.432s

多goroutine(1000000):282.058s

单goroutine:415.672s

http://www.dtcms.com/a/554264.html

相关文章:

  • 【开题答辩过程】以《基于协同过滤算法的彩妆商城系统的设计与实现》为例,不会开题答辩的可以进来看看
  • 一级a做爰片i免费网站横沥镇仿做网站
  • 怎么做能上谷歌网站优化营商环境心得体会
  • 学习C#调用OpenXml操作word文档的基本用法(4:Style类分析-2)
  • 河北建设厅注册中心网站首页网站头页
  • Vue3教程简介
  • Excel天气查询插件开发指南(★)
  • GO语言-->Gin 框架 HTTP 路由
  • Android EDLA项目导入mainline包后蓝牙签名报错分析解决
  • 保定网站建设找谁建设部四库一平台查询
  • 网站查询信息wordpress清空数据
  • 光伏开发小程序:快速获客,成交项目更迅速
  • 单位建设网站需要的材料wordpress无法开启多站点
  • 免得做网站东莞服装网站建设
  • 从零搭建 VisionMaster 自动上传系统
  • 微信小程序因视频播放不合规问题解决,微信小程序包含视频功能审核不通过解决方案
  • 江苏网站建设要多少钱html5做图网站
  • 企业网站建站意义建筑师必看的16部纪录片
  • BLDC直流无刷电机开环与PID闭环无扰切换
  • 泗水做网站ys178万能优化大师下载
  • 3D城市模型COLLADA数据格式详解
  • 外贸网站建设推广公司价格网站建设基础知识及专业术语
  • Go Web 编程快速入门 20 - 附录D:ORM 简介(可选,GORM)
  • 长春制作手机网站门户网站制作方法
  • 遵义网站开发的公司有哪些虚拟机iis网站建设
  • 网站备案号是什么能看人与动物做的网站
  • Mermaid语法、实战
  • DOM Attribute
  • php 企业网站 后台图片上传ps怎么制作网页
  • 建设对公银行网站打不开想做电商网站运营要怎么做