网易首页 > 网易号 > 正文 申请入驻

while循环使用数据长度为0作为终止条件?我的程序员同事踩坑了!

0
分享至

用一个动态数据的长度去作为while循环的终止条件?什么样的程序员会这么干?您别说,还真让我给遇到了,而且,通过这件事情,让我觉得有些公司做代码审查还是挺重要的,如果不是万不得已,代码审查一定要做,否则就会出现我接下来所说的事情!



程序逻辑

我们公司有个程序员写了一个项目,需要通过程序去监控摄像头前面有没有东西经过,有的话,就需要每隔一段时间去拍一张照片并保存,这个间隔是很短的,直到当摄像头前面的东西超出了摄像头的监控范围,拍摄并保存的逻辑才会终止,直至下一次摄像头前面重新有东西经过,再执行相同的逻辑,周而复始。

拍到照片以后还需要通过视觉算法去进行运算,但运算速度比不上拍照片的速度,所以拍照片和视觉算法我的这位同事使用了两个线程去处理,而问题恰恰也出现在这!

这个项目在交付给客户使用后,客户反馈过来的结果是拍摄到的照片经常丢帧,有时候甚至就只拍了一张照片。

既然客户说有问题,我首先让写这个项目的程序员自查,结果他琢磨半天也没看出问题,于是,就只能让我去看他写的代码了。我一边看代码,一边问同事相关逻辑,后来总算把他的代码逻辑给理顺了。

他的逻辑大致是这样:

当程序检测到摄像头前面有东西在动的时候,会记录一个信号,当这个东西离开摄像头视野的时候也会记录一个信号。他在两个信号之间使用了一个异步while循环来重复获取摄像头当前帧的图片,因为摄像头取图的速度要快于算法的速度,他每次取完图以后,会直接把图片塞进一个队列(Queue)里面。

之后,他又使用了一个异步while来监控队列的长度,如果有数据,则执行算法逻辑,执行完算法以后再将图片进行保存,直至信号消失。


demo

while循环异常停止

这个逻辑本身是没有问题的,取图逻辑和算法逻辑互不干涉,不会因为算法执行比较耗时而出现取图的时候丢帧的情况,所以一开始我也没有发现他的代码写得有什么问题。

既然客户说保存时丢帧,那么肯定是保存逻辑那里出现的问题,于是我将断点下在了执行算法并保存图片的那个while循环里。

编译运行以后,发现while循环循环了几次就停止了,显而易见,逻辑是有问题的,也很显而易见,这段代码没有经过严谨的测试,但此时我也不想深究这个程序员的责任了,我只想找出哪里有问题。

排查了一圈发现,虽然while循环内部是有好几个用于跳出循环的break,但是,逻辑比较严谨,挑不出毛病。于是,我把问题定位在了while循环的执行条件上。

while循环的执行条件有两个,一个是前面说的那个当摄像头前面有东西经过时给的信号标记,当信号标记变量的值为true的时候,这个while循环显然会一直执行。另外一个我一开始看着感觉有问题,后来越看越觉得有问题,那就是队列(Queue)长度。

发现问题

虽然一时感觉不上来哪里有问题,我还是问了些这段代码的同事,问他什么目的。

结果他说:“因为摄像头拍照的速度大于算法速度,所以我这里直接监控队列长度,如果队列里面没有数据了,说明拍照终止了,那么循环也就可以终止了!”

有一个很显而易见的问题,那就是,我的同事自认为拍照速度大于算法速度,所以只要拍照不停止,队列里面就永远有数据,队列长度就永远大于0。

但是,这种说法只是理论上的,如果突然有那么一回算法的执行速度高于拍照的速度,那么while循环就可能在拍照之前被结束。

我问同事有没有这种可能,同事说:“不可能!”

我笑着问:“你就那么自信?”

我也不想给他难堪,于是就在取图的逻辑那里写了日志,结果出来后,我同事彻底无话可说了!

原来,摄像头在取图时可能会出现丢帧的情况,取100张图可能会丢帧30张,如果取一张图需要消耗10毫秒的话,原本取100张图需要消耗1000毫秒,此时取70张图就消耗了1000毫秒。

算法的执行速度虽然没有取图逻辑执行的快,但是很有可能在连续取图失败后,正好队列里面的数据也被取完了,此时队列就空了,执行算法的while循环就终止了!


demo

极端情况下,当程序刚收到有东西经过摄像头的信号时,触发取图逻辑,但取图逻辑连续取了几张图都丢了帧,导致队列提前空了,因此后面无论取多少图,用来执行算法逻辑的while循环都不会再执行了!

我告诉我的同事,没必要把用来存储图片的队列长度当作while循环的执行条件,因为有触发取图的信号和停止取图的信号,只需要根据信号标记变量来判断是否继续执行算法逻辑即可。

而判断队列长度也不是没有必要,但是应当放到while循环里面去,当队列长度为0时,走跳过(continue)逻辑即可!


解决办法

修改代码后,经过本地测试加上客户现场测试,之前的问题不再出现!

其实我觉得,不管怎么样,像队列(Queue)等不固定长度的数据均不应该成为while循环的终止条件,除非是在单线程里面执行,而且,也尽量不要这么写!

声明:个人原创,仅供参考

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
高考首日孙海洋妻子说健康就好,孙卓像胖了20斤,买家一切落空

高考首日孙海洋妻子说健康就好,孙卓像胖了20斤,买家一切落空

九方鱼论
2024-06-07 19:17:23
局势骤变!中俄同时收到“战书”,这次不是美国,出乎所有人意料

局势骤变!中俄同时收到“战书”,这次不是美国,出乎所有人意料

星辰故事屋
2024-06-05 20:11:05
A股:紧急提醒所有散户,不要抱侥幸心理,变盘信号已经非常明显

A股:紧急提醒所有散户,不要抱侥幸心理,变盘信号已经非常明显

静守时光落日
2024-06-07 13:43:33
援助太慢,拜登公开向泽连斯基道歉

援助太慢,拜登公开向泽连斯基道歉

参考消息
2024-06-07 22:29:26
网红餐厅老板突然跑路,留下6只企鹅!员工急了

网红餐厅老板突然跑路,留下6只企鹅!员工急了

极目新闻
2024-06-06 15:01:28
AI改AI!国内两大AI互改对方的湖南高考作文,结局出乎意料

AI改AI!国内两大AI互改对方的湖南高考作文,结局出乎意料

潇湘晨报
2024-06-07 16:37:06
F16战机终究是来了!真正考验俄罗斯空天军实力的时刻到来了!

F16战机终究是来了!真正考验俄罗斯空天军实力的时刻到来了!

翻开历史和现实
2024-06-04 23:12:26
2024年北京市的养老金调整方案会是怎样的?了解一下前两年的变化

2024年北京市的养老金调整方案会是怎样的?了解一下前两年的变化

暖心人社
2024-06-07 20:51:17
发生关系,多久一次最舒服?

发生关系,多久一次最舒服?

匡北北
2023-12-15 23:56:59
嫦娥六号上升器将再度着陆月表!

嫦娥六号上升器将再度着陆月表!

轻舟一号
2024-06-06 22:37:40
莫丽被查,曾任南宁海关二级巡视员

莫丽被查,曾任南宁海关二级巡视员

新京报政事儿
2024-06-07 10:49:05
世界第1拒翻车!决胜时刻放大招,2-1逆转法国名将,石宇奇晋级!

世界第1拒翻车!决胜时刻放大招,2-1逆转法国名将,石宇奇晋级!

钉钉陌上花开
2024-06-07 16:29:56
银行闭店潮,来了?400家分行关闭!

银行闭店潮,来了?400家分行关闭!

薪想事成的班
2024-06-07 09:02:48
组建20个机械化步兵师 接装4000辆全履带主战坦克:这是针对谁?

组建20个机械化步兵师 接装4000辆全履带主战坦克:这是针对谁?

聚峰军评
2024-06-06 14:27:25
樊振东:绝配!美女配英雄,他和第一美女王添艺的合照竟有种CP感

樊振东:绝配!美女配英雄,他和第一美女王添艺的合照竟有种CP感

综艺不八卦
2024-06-05 18:40:19
为什么有人下面没毛?女性私处毛发的3个作用,别害羞,不妨了解

为什么有人下面没毛?女性私处毛发的3个作用,别害羞,不妨了解

碧晴养生汇
2024-06-07 06:22:58
陕西开始摆烂?网友为何如此评论?来看看大家怎么说。

陕西开始摆烂?网友为何如此评论?来看看大家怎么说。

棒棒糖画画
2024-06-07 18:40:28
“毒教材”消失!新教材国风满满、五官端正,中国人的审美回来了

“毒教材”消失!新教材国风满满、五官端正,中国人的审美回来了

史小纪
2024-06-04 11:05:25
刘亦菲突然高调宣布喜讯!恭喜啊,这一天终于来了!

刘亦菲突然高调宣布喜讯!恭喜啊,这一天终于来了!

综艺停车场
2024-06-07 18:34:36
为什么一定要“封杀”郭有才?

为什么一定要“封杀”郭有才?

落纸生花创意手工
2024-06-02 12:07:34
2024-06-07 23:00:49
程序员古耕
程序员古耕
程序员、网文作家、自媒体人
385文章数 287关注度
往期回顾 全部

科技要闻

6家大模型抢答高考作文,谁是你心中的Top1

头条要闻

东莞新盘"以旧换新"可优惠30万 二手房业主"保卫房价"

头条要闻

东莞新盘"以旧换新"可优惠30万 二手房业主"保卫房价"

体育要闻

优势在我?中国足球有自己的节奏

娱乐要闻

汤唯抵达巴黎将担任奥运火炬手

财经要闻

身陷退市股的投资者:我的钱瞬间没了

汽车要闻

2.0T混动售20.98万元起 福特蒙迪欧运动版上市

态度原创

手机
房产
健康
数码
艺术

手机要闻

苹果 iOS 18 喜提“Apple Intelligence”,多项 AI 服务重磅登场

房产要闻

顶流地段+顶级户型!香港半山豪宅,已成为高净值人群的资产压舱石!

晚餐不吃or吃七分饱,哪种更减肥?

数码要闻

2000多就能买安卓旗舰平板,这届618别光看苹果了!

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

无障碍浏览 进入关怀版