多线程处理耗时任务

平台有一个需求:处理客户端传上来的文件,并返回给客户端一个信息。如果客户端接收的信息不是200(即平台端接收文件有异常)或着平台端返回的信息超时,则会发起重传。而平台端要处理的事情是,接收文件并分析处理将关键信息入库

我刚开始的设计逻辑是这样的


原来的逻辑设计图

刚开始一切都是OK的,但是后来文件数据量的增多,文件解析就需要耗费一定的时间,返回给客户端的信息的时间就会增加,导致返回的时候时间超时,又引发客户端超时重发的机制,所以平台端最后收到好几份数据重复的文件。

为了解决这一问题,想到的方法便是,采取多线程方式。每个文件都开启一个线程对它进行解析,不等解析结果,而是收到完整文件后就直接返回客户端OK的信息,将耗时的操作都放在多线程之中,避免客户端超时。


修改后的结构图

这个问题给我的启发是,当你和别的模块合作时,你要理解合作的模块需要你返回什么信息。比如,客户端只需要我告诉他我是否已经接收到文件,因为平台接收到文件意味着他的任务完成了,至于解析成功与否是平台的任务。

还有需要了解合作模块的基本机制,比如,如果我事先了解到客户端在超时情况下会重传,那么我会有这样的风险意识:如果我在耗时操作后再返回给客户端信息,那我可能会导致客户端重传,所以我应该抓住最关键点去返回信息给客户端,避免后续的问题产生。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,067评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,812评论 25 709
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,384评论 11 349
  • 文章中的内容说实话没法聊,也就哲哥跟超哥可能可以聊一下,其他人也就只能随便谈谈了,我就扯点别的。 制造业属于国家经...
    丿子木丨阅读 306评论 0 0
  • 周围,已是一片火烧云,宛如一片红晕在水中荡漾开来,染红四周。渐渐,连光芒都变得如玫瑰红一般,温柔地轻拂大地。 ...
    西瓜不懂柠檬酸i阅读 179评论 0 0