阅读:1543回复:5
使用多线程可否提高数据处理速度?
WIN2K环境下,应用程序将多个文件数据读出,经过处理后通过PCI卡输出。
APP使用异步写操作输出数据,驱动程序使用中断驱动方式,即在中断服务中检测是否有当前的IRP,有则申请DPC处理,没有则返回。因此APP必须在PCI的两次中断之间完成数据处理工作,否则IRP不能及时地发下去,将有中断落空。 由于数据处理量相当大,现在这个问题已经暴露出来。由于WIN2K是分时系统,我考虑使用多一些线程来处理数据,以更多地占用CPU时间,不知道这样行不行!不知道2K分配CPU时间,是按进程分配还是按线程分配的。 |
|
|
沙发#
发布于:2002-11-24 20:56
arthurtu兄:
读文件花了不多少时间,而且我用了较大的读文件缓冲(32M)。我尝试过把读文件部分取消掉,把驱动程序改成假操作(并不真的输出,只是响应中断,直接完成IRP),这样系统监视器所查到的CPU占用,就全部都是数据操作造成的了。而资源占用量只减少了30%。而这30%实际上是驱动节省下来的。 驱动占用资源也是个突出的问题,我另帖提问。 |
|
|
板凳#
发布于:2002-11-24 17:40
Gong_XG兄: 我觉得可能时间都花到读取文件上了,数据处理应该够了吧? 可以在一开始就把文件都读到内存去,减少以后读取的时间,试试看?呵呵。 |
|
地板#
发布于:2002-11-24 14:08
你先试试,这个周查点资料看看,再给答案!OK
|
|
地下室#
发布于:2002-11-23 22:31
Gong_XG兄:
早都分成两个线程来处理了,结构正如您所说的那样,读文件和数据处理是放在一起的,现在的情况是这一个线程处理不过来,中断正好丢了一半,而减小了数据处理量,问题就能解决。 目前的情况是:中断间隔不到100ms,而这期间要读32个文件,每个文件读出32K字节,更可恶的是这共计1M字节还要每字节逐位处理,一个线程是完成不了这个计算量了,虽然我的机器并不很差(P4_1.6G_256M),现在想把文件读取部分用一个线程,而数据处理单用一个或更多个线程来做!不知可行否。 |
|
|
5楼#
发布于:2002-11-23 20:38
能否把应用程序做成两个线程,一个检测中断是否完成(每次进入中断后,设置一Flag为未完成,中断结束前,设置Flag完成);一个发送数据,中断完成就发送;否则,交出所占资源。
|
|