首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将单线程应用转换为多线程应用

如何将单线程应用转换为多线程应用
EN

Stack Overflow用户
提问于 2013-10-20 03:43:36
回答 1查看 570关注 0票数 0

我编写的一个应用程序(用C#编写)的中心过程可能涉及到从磁盘文件中进行多次读取,然后处理这些读取。然后通过BinaryWriter将数据写出到相同的输出文件。

这个过程通常非常冗长,所以我想,如果它在多核机器上运行,它可以为每次读到内核x处理器线程实例化一个线程。每一个都会处理数据,然后把它写出来。除了BinaryWriter之外,没有其他关键部分。

如果我使用一个类Working和一个函数Working.work()来进行处理,并且我有四个内核要处理(当然,这四个内核不是硬编码的;我会询问我有多少个内核并使用这个数字,我会怎么做?

目前我有一些类似的东西:

代码语言:javascript
复制
    Working working = new Working();

    while (bytesRead = binaryReader(ref buffer,0,bytesToRead) != 0)
    {
      work.buffer = buffer;
       working.work();
       binaryWriter(buffer,0,buffer.Length);
    }

似乎将这一切都转移到一个线程中会有所帮助。但是我必须知道线程什么时候结束,这样新的读取才能在线程上。

EN

回答 1

Stack Overflow用户

发布于 2013-10-20 04:20:19

这里有一些关于异步文件IO和在MSN上使用任务的好例子:http://msdn.microsoft.com/en-us/library/jj155757.aspx

一般而言,您可以做的是为工作项创建一个异步工作队列(注意:从.NET 4.0开始,有一个ConcurrentQueue集合可以帮助进行异步处理),您可以在其中设置x个工作任务。已完成的任务,然后将移动到一个非异步写入器队列,您可以为该队列设置一个等待新项到达的不同任务。

在这里可以看到更多来自微软的关于这个主题的信息:http://msdn.microsoft.com/en-us/library/hh873173.aspx

尤其是从生产者/消费者模式向下应该与您相关。(虽然我没有看到它使用ConcurrentQueue,也许是因为它是在4.0之前编写的?)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19470313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档