日期:2014-05-17  浏览次数:21177 次

开启20个线程去读取txt文件
一个txt 大概有20W 行,我要把每行读取出来插入数据库,但是速度太慢,
如何开启20个线程去读取,然后插入数据库???

------解决方案--------------------
引用:
我只听说过中断嵌套,没听说过一个中断能多个线程轮流分配。。或者你说的中断不是datasheet里的interrupt而是别的什么东西。。另外磁盘IO都是通过DMA了,不是靠CPU去写。。GHOST速度快的原因是不考虑已有文件直接连续写盘,直接复制粘贴慢是因为要来回读写FAT、MFT之类的,所以会慢些。。
另外。。1#的小哥做法真是得儿。。。

我没有研究过那个原理,只是举例而已,难免有不当之处。我的多年的经验告诉我,这里肯定不适合拆出多线程,我只是为了表达这个意思而已,实际影响速度的因素很多,拆分线程处理的话,只会减慢速度。单线程的GHOST都可以达到最快的处理速度(DOS下面只能单线程),可见不是多线程了就可以如何如何的。
------解决方案--------------------
不管是读文件还是写数据库,对于普通硬盘来说这种情况多线程只会更慢,决策与CPU或者DMA没有关系。
如果内存不够(非批量操作)或者文件与数据库位于不同的存储介质,读文件与写数据库应该有各自的线程处理。
------解决方案--------------------
引用:
不管是读文件还是写数据库,对于普通硬盘来说这种情况多线程只会更慢,决策与CPU或者DMA没有关系。
如果内存不够(非批量操作)或者文件与数据库位于不同的存储介质,读文件与写数据库应该有各自的线程处理。
不管是否DMA(DMA主要是异步实现,CPU一般都不会成为瓶颈),磁头只有一个,有序访问总是最好的,硬盘IOCP的要点就是尽量有序访问硬盘。
------解决方案--------------------
引用:
不管是否DMA(DMA主要是异步实现,CPU一般都不会成为瓶颈),磁头只有一个,有序访问总是最好的,硬盘IOCP的要点就是尽量有序访问硬盘。

有一个错误,硬盘IOCP的要求是磁头尽量的少移动。
------解决方案--------------------
引用:
顺便打开你的进程管理器,并且显示“所有用户的进程”,你可以看看有多少进程、多少线程。这还只是一部分而已。

我们应该让程序员学会编写多线程程序,慢慢学会做一些“酷”的创新产品,而不是只会做点小儿科的什么“增删改查”界面。
sp大神这次出错啦。
这里的“资源”可不仅仅是cpu或内存,
还包括io和irq(这应该就是木桶效应的最低处了)

事实上除了那些分布式/大数据,等“高端”应用,常规应用中,
是否需要多线程,应该是从业务模型和需求逻辑来分析。比如确实是有多组数据模型需要运行,同时这些模型的参数不确定、不一致。
单纯只在性能角度去做并行优化,除了多请求并发这块,还没发现其他情况需要的。

------解决方案--------------------
现在的电脑瓶颈都在磁盘而不在CPU,CPU几线程就开几条线程执行读取就能充分利用CPU了,不过读取文件的话瓶颈还在磁盘
------解决方案--------------------
引用:
sp大神这次出错啦。
这里的“资源”可不仅仅是cpu或内存,
还包括io和irq(这应该就是木桶效应的最低处了)

事实上除了那些分布式/大数据,等“高端”应用,常规应用中,
是否需要多线程,应该是从业务模型和需求逻辑来分析。比如确实是有多组数据模型需要运行,同时这些模型的参数不确定、不一致。
单纯只在性能角度去做并行优化,除了多请求并发这块,还没发现其他情况需要的。
不知道你有没有发现这样的“简单”应用也还是需要多线程的。。

------解决方案--------------------