大家好,我有一个问题,现在有10000条数据,我每次取100条数据 开3个线程持久化处理,后来发现每个线程拷贝1份,结果持久化300条数据,怎么解决?
两种解决办法。
一是“划下道道”,每个线程处理部分记录,相互之间不重叠,比如说“你处理单数我处理双数,你处理1月份我处理2月份”等等。
二是请个“发牌手”,每个线程从“发牌手”那里拿“牌”,也就是要处理的记录,每个线程每次处理完一条记录后,都从“发牌手”那里取下一条,直到所有记录处理完为止。
两者各有优劣。
第一,前者不需要进行同步处理,记录分配的成本为0,后者需要进行同步,任务分配需要一点时间,其长短取决于分配方式。
第二,前者的分配是一开始固定的,也就是说如果有个线程处理得慢,或者说个别记录处理得慢的话,那别的线程处理完自己的部分,就无事可做,只能等它完成,于是整体进度被拖慢了。后者是动态的分配记录,所以即使个别记录处理得慢,也能让线程的使用率最大化,尽可能缩短整体的处理时间。
4 回答1.4k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
2 回答740 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
先对数据进行分片,例如你期望3个线程来处理的话,将数据尽量均衡的分为三分,然后在你的多线程中,读取各自的分片数据。
BTW:这个问题真的很low.我实在忍不住想吐槽一下。