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

新乡正规网站建设哪家便宜建设个人网站用什么软件好

新乡正规网站建设哪家便宜,建设个人网站用什么软件好,爬虫 做资讯网站,上传宝贝网站建设属于什么类目前言 在实习的项目中有一个地方遇到了需要协程池的地方#xff0c;在mt推荐下使用了ants库。因此在此篇记录一下自己学习使用此库的情况。 场景描述 此服务大致是一个kafka消息接收、发送相关。接收消息#xff0c;根据参数设置定时器进行重发。 通过这里新建kafka服务在mt推荐下使用了ants库。因此在此篇记录一下自己学习使用此库的情况。 场景描述 此服务大致是一个kafka消息接收、发送相关。接收消息根据参数设置定时器进行重发。 通过这里新建kafka服务并在kratos框架的依赖注入使用。 func NewxxxxKafka { RegisterSubscriber(context.TODO(), t, c.Group, false, handler.HandlerFunc(), nil) } 这是其中的HandlerFunc在其中调用到Save部分逻辑操作。 func (h *xxxxxxxxxxx) HandlerFunc() broker.Handler {return func(ctx context.Context, event broker.Event) error {return h.uc.Save(ctx, msg)} } 这个是我的逻辑部分其中RetryAtTime中会设置定时器并进行执行。在此之前涉及部分数据库操作。 func (uc *xxxx) Save() error {//部分数据库操作go uc.ms.RetryAtTime(ctx, id, UnixNextRetryTime)//其中有定时器 } 如果此处不使用协程那么所有消息接收都会因为定时器而卡死在主线程。 单使用wg.group的方案 单给定时器加协程 func (uc *xxxx) Save() error {var wg sync.WaitGroup//部分数据库操作go uc.ms.RetryAtTime(ctx, id, UnixNextRetryTime)//其中有定时器wg.Add(1)defer wg.Done()return nil } 单给定时器使用协程并没有实现真正的并发只是在协程中去运行了定时器的逻辑其他所有操作依旧是单线程的。 这样可以解决定时器阻塞的问题但系统性能并没有提升。 消费消息时候加协程 将加协程移到HandlerFunc处可以实现并发的处理消息。 func (h *xxxxx) HandlerFunc() broker.Handler {return func(ctx context.Context, event broker.Event) error {h.wg.Add(1) // 增加等待组计数go func() {defer h.wg.Done() // 完成后减少等待组计数err : h.uc.Save(ctx, msg); err ! nil }()return nil} } 这里需要注意不能在handlerfunc中去var wg sync.waitgroup。因为这样的话每次调用都会新声明一个那么每一个wg也只和一个goroutine关联了。需要写到结构体中。 但毕竟涉及到数据库操作协程中操作数据库可能会导致一些问题。虽然我这里业务逻辑好像只有一个增和查没什么影响 使用ants协程池 使用协程池管理协程:struct中新增pool type xxxx struct { // xxxxxxxxxxxxx//wg sync.WaitGroupPool *ants.Pool }初始化在此处设置协程池的容量。因为考虑到有大量的定时器所以选择了一个相较于目前数据,较大的协程池。 func Newxxxx(xxxxx ) *xxxx {pool, err : ants.NewPool(10000)if err ! nil {log.Fatalf(failed to create ants Pool: %v, err)}return xxxx{//xxxxxPool: pool,} }使用,主要是pool.Submit(func())函数,像池子中添加一个用于并发执行的函数即可。其余就交给池子底层去解决了。 func (h *xxx) HandlerFunc() broker.Handler {return func(ctx context.Context, event broker.Event) error {return h.Pool.Submit(func() {//xxxxxxif err : h.uc.Save(ctx, msg); err ! nil {h.logger.Error(failed to save message, error, err)}})} } 记得在外层关闭池子 func NewxxxxxKafka() {for _, t : range c.Topics {if err : ks.RegisterSubscriber(context.TODO(), t, c.Group, false, handler.HandlerFunc(), nil); err ! nil {log.Fatal(err)}defer handler.Pool.Release()}} 总结 主要是记录了一次自己对协程池的使用在此过程中从仅使用协程处理定时器到使用协程处理整个方法实现并发再到使用协程池。后续会进行ants库底层源码的学习。
http://www.hkea.cn/news/14553202/

相关文章:

  • 把网站提交给百度中国建设教育协会网站打不开
  • 网站放音乐代码企业网络建设基础情况
  • 张家港建设局网站wordpress前台注册 邀请码
  • 快速开发网站的应用程序建设银行投诉处理网站
  • 网站登录密码忘记邮箱购买网站
  • 搜索引擎大全网站网站建设做一个要多久
  • 同个主体新增网站备案网页设计的工作
  • 如何打造网站爱主题wordpress
  • 网站怎么做登陆软文形式推广产品
  • 北京网站优化推广方案网站栅格
  • 电商网站开发项目计划书网站模板制作流程
  • 房山石家庄网站建设长沙米拓建站
  • 三网合一的网站怎么做基础微网站开发代理
  • 专业的外贸行业网站制作网站编程技术 吉林出版集团股份有限公司
  • 网站开发现状都用php汨罗网站建设
  • 网站建设福州大数据网站怎么做的
  • 贵州贵阳网站开发wordpress插件销售
  • 网站app的作用西安做网站报价
  • 企业网站建设 南通用python做网站前端
  • 成都诗和远方网站建设学校网站织梦源码
  • 集团网站建设的要求网站建设程序流程图
  • 南京量身营销型网站设计做网站具体收费
  • xyz域名做网站好么青岛网架公司
  • 网站建设与管理题目备案号查询
  • 专业网站制作公司排行湖南响应式官网建设哪家好
  • 建设网站怎么收费标准建浏览器网站制作
  • 柳州网站建设多少钱网页制作全部过程
  • 网站策划需要具备什么自己做微博的网站
  • 浏览不良网站会被网警抓吗永久免费网站建设
  • 网站原型图设计南京网页设计照片