如何理解关于多线编程的取与舍
如何理解关于多线编程的取与舍,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
实际的项目用例比较实在,那么我现在就讲我平时在项目中用常用的一些业务梳理处理,以供参考,写到不好勿喷,有更好的解决方式,欢迎交流。谢谢!
多线程的中的取与舍
还是用上几篇文章中的关于酒店客房的数据来为例分析,假设系统同时对接了x程、y龙、q哪三家接口数据,用户进入到某一个酒店预订页面,系统需要实时的到第三方取该酒店对应房间的实时动态数据呈现给用户,但是在这个过程中,不能让用户等待的太久,并且能够尽可能多的提供多渠道给用户选择,那么这个时候该如何去实现这个需求呢?
做过聚合平台的同学,无论是酒店、机票、咨询等等,或多或少都会遇到这样类似的业务场景,下面分享一下,我们平时是怎么实现。
简单的说就是一个取与舍的逻辑,你想啊,不同的接口方,接口的查询效率不尽相同,并且同一接口在不同时间处理时间也不尽相同,遇到某一些特殊情况,有可能一个接口数据需要等待5-10s甚至更久才能取出数据,这个时候你不可能让用户也等待这么久吧,如果是这样,估计用户早吓跑了。况且这样等待下去,也会对系统带来很大的压力,尤其是在做活动高峰期时,那直接就是系统的一个瓶颈了。
为了到达这一目的,那么在实现上,我们首先应该想到的是,在约定时间内未返回数据的接口,那么我们直接放弃,只展示给用户已取到的数据即可。
那在技术上该如何实现呢?
在实现上,有了Task,一切都变得那么轻松啦,因为Task.Wait方法已经为我们考虑到了这样的场景,直接使用即可。
看到了吧,在重载方法中,有一个timeOut字段,该字段就是用于舍弃超时未处理完成的线程任务。那具体该怎么用呢?
通过上面的运行结果,我们发现只要1s内,只有携程返回了数据,那么最终也就只返回给用户携程的数据。这个实例就这样实现了,当然,我相信你或许会有更好的实现,欢迎一起交流与学习,谢谢
关于如何理解关于多线编程的取与舍问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。