同时开3个线程执行持久化操作的问题

大家好,我有一个问题,现在有10000条数据,我每次取100条数据 开3个线程持久化处理,后来发现每个线程拷贝1份,结果持久化300条数据,怎么解决?

阅读 2.6k
3 个回答

先对数据进行分片,例如你期望3个线程来处理的话,将数据尽量均衡的分为三分,然后在你的多线程中,读取各自的分片数据。

BTW:这个问题真的很low.我实在忍不住想吐槽一下。

可以提前split好,这样各自读各自的 。如果是动态的话,最好还是放进blockqueue中,

两种解决办法。

一是“划下道道”,每个线程处理部分记录,相互之间不重叠,比如说“你处理单数我处理双数,你处理1月份我处理2月份”等等。

二是请个“发牌手”,每个线程从“发牌手”那里拿“牌”,也就是要处理的记录,每个线程每次处理完一条记录后,都从“发牌手”那里取下一条,直到所有记录处理完为止。

两者各有优劣。

第一,前者不需要进行同步处理,记录分配的成本为0,后者需要进行同步,任务分配需要一点时间,其长短取决于分配方式。

第二,前者的分配是一开始固定的,也就是说如果有个线程处理得慢,或者说个别记录处理得慢的话,那别的线程处理完自己的部分,就无事可做,只能等它完成,于是整体进度被拖慢了。后者是动态的分配记录,所以即使个别记录处理得慢,也能让线程的使用率最大化,尽可能缩短整体的处理时间。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题