前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >项目开发中使用并发模型常见问题的整理与思考

项目开发中使用并发模型常见问题的整理与思考

作者头像
Ryan_OVO
发布2023-10-19 19:16:13
1170
发布2023-10-19 19:16:13
举报
文章被收录于专栏:程序随笔

需求: 数量不定,会定期更新数据,且数据量大的一堆数据,需要在短时间内调用某个接口获取到所有的数据,随后根据返回的json键值进行分类处理。

需求如上,初步分析,我们必然会用到多线程来做,即开一定数量的线程去调用接口获取数据,随后处理返回的json数据,这一套我们需要分开来做,调用接口获取数据我们可以看成是生产者,而处理返回的数据,将其分类就可以看作是消费者。那么,现在我们要来思考下采用这套模型可能会产生的问题。首先,如果生产者生产的数据的速度小于消费者消费的速度,那么此时,我们就需要挂起消费者线程,直到生产者生产了数据,也就是说,在生产者与消费者之间存储数据的容器,我们需要慎重选择,不能仅仅选择队列数据结构来存储,考虑到这种情况,我们可以换成阻塞队列这种数据结构来作为生产者-消费者模型的中间容器层。

容器的问题解决了,那么接下来还需要继续分析。在此模型中,生产者一边生产数据,消费者一边消费数据,但是就算是再多的数据,也会出现获取完的时候,那么我们此时如何标记生产者已经没有数据再能生产了呢?如何将这个信息通知给消费者?不能简单地通过队列中数据的数量来判断,由于我们是一边消费一边生产的,因此队列中的数据量就会不准。我们可以引入一个线程安全的队列来记录每一次生产者生产的数据量。然后再消费者那边做一个判断,如果此时的标记队列的数量恰好就是总的数据量,那么关闭生产者线程,同时,当消费者线程消费完容器阻塞队列中的数据的时候,就完成了所有的操作,此时跳出所有的循环,不再启用线程处理。在这里我们引入了一个第三方的队列来判断,从空间以及时间来看,增加了一点内存,也耗费了大概几百ms到1s左右的时间,可以忽略,但是我们也有第二种方法来实现,那就是利用原子锁,原子锁本就是为了维护值类型即整型之类的线程安全性,我们完全可以原子锁来做实现,而且是无锁操作。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档