文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

GoFrame基于性能怎么测试grpool使用场景

2023-07-02 11:29

关注

今天小编给大家分享一下GoFrame基于性能怎么测试grpool使用场景的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

先说结论

grpool相比于goroutine更节省内存,但是耗时更长;

原因也很简单:grpool复用了协程,减少了协程的创建和销毁,减少了内存消耗;也因为协程的复用,总的goroutine数量更少,导致耗时更多。

测试性能代码

开启for循环,开启一万个协程,分别使用原生goroutine和grpool执行。

看两者在内存占用和耗时方面的差别。

package mainimport (   "flag"   "fmt"   "github.com/gogf/gf/os/grpool"   "github.com/gogf/gf/os/gtime"   "log"   "os"   "runtime"   "runtime/pprof"   "sync"   "time")func main() {   //接收命令行参数   flag.Parse()   //cpu分析   cpuProfile()   //主逻辑   //demoGrpool()   demoGoroutine()   //内存分析   memProfile()}func demoGrpool() {   start := gtime.TimestampMilli()   wg := sync.WaitGroup{}   for i := 0; i < 10000; i++ {      wg.Add(1)      _ = grpool.Add(func() {         var m runtime.MemStats         runtime.ReadMemStats(&m)         fmt.Printf("运行中占用内存:%d Kb\n", m.Alloc/1024)         time.Sleep(time.Millisecond)         wg.Done()      })      fmt.Printf("运行的协程:", grpool.Size())   }   wg.Wait()   fmt.Printf("运行的时间:%v ms \n", gtime.TimestampMilli()-start)   select {}}func demoGoroutine() {   //start := gtime.TimestampMilli()   wg := sync.WaitGroup{}   for i := 0; i < 10000; i++ {      wg.Add(1)      go func() {         //var m runtime.MemStats         //runtime.ReadMemStats(&m)         //fmt.Printf("运行中占用内存:%d Kb\n", m.Alloc/1024)         time.Sleep(time.Millisecond)         wg.Done()      }()   }   wg.Wait()   //fmt.Printf("运行的时间:%v ms \n", gtime.TimestampMilli()-start)}var cpuprofile = flag.String("cpuprofile", "", "write cpu profile `file`")var memprofile = flag.String("memprofile", "", "write memory profile to `file`")func cpuProfile() {   if *cpuprofile != "" {      f, err := os.Create(*cpuprofile)      if err != nil {         log.Fatal("could not create CPU profile: ", err)      }      if err := pprof.StartCPUProfile(f); err != nil { //监控cpu         log.Fatal("could not start CPU profile: ", err)      }      defer pprof.StopCPUProfile()   }}func memProfile() {   if *memprofile != "" {      f, err := os.Create(*memprofile)      if err != nil {         log.Fatal("could not create memory profile: ", err)      }      runtime.GC()                                      // GC,获取最新的数据信息      if err := pprof.WriteHeapProfile(f); err != nil { // 写入内存信息         log.Fatal("could not write memory profile: ", err)      }      f.Close()   }}

运行结果

组件占用内存耗时
grpool2229 Kb1679 ms
goroutine5835 Kb1258 ms

以上就是“GoFrame基于性能怎么测试grpool使用场景”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯