首页
学习
活动
专区
圈层
工具
发布

批处理
EN

Stack Overflow用户
提问于 2013-01-10 16:22:32
回答 3查看 1K关注 0票数 1

我有一个字符串列表,我想根据每个文件的键输出到不同的文件(这个键在列表中,所以如果这个键在某个节点是1,那么这个字符串需要写到文件1.txt中,如果键是2,那么输出应该重定向到2.txt,依此类推…)。

我的想法是,为每个列表成员分配一个唯一的键,使其成为唯一的记录,然后根据系统中可用处理器的数量产生多个线程。线程将节点池(即我的列表)中节点的输出重定向到相关文件。我怀疑这是否是一个好的批处理设计。或者我应该只有一个线程来做所有的输出工作。

在我被抨击或做任何事情之前,让我告诉你我只是一个好奇的学习者。

EN

回答 3

Stack Overflow用户

发布于 2013-01-10 16:28:41

让它成为单线程的。然后运行,找出你的瓶颈是什么。如果您发现瓶颈是CPU而不是磁盘IO,那么启用并行处理。

票数 0
EN

Stack Overflow用户

发布于 2013-01-10 16:47:15

据我所知,你的处理步骤是:

按键选择文件

  • write item to file

我认为,当并行处理可以提高性能时,情况并非如此。如果您想要加速这段代码--使用缓冲和异步I/O。

为每个文件维护一个标志- write-in-progress

  • when您想要写入文件-如果write-in-progress为False,请检查此标志
    • set -in-
      • =True
      • 将项目添加到缓冲区<

      >H117开始将此缓冲区写入文件asynchronously

代码语言:javascript
复制
- if _write-in-progress_ is True: 
    - add your item to buffer

  • 在挂起的异步操作完成时检查
    • 是否存在非空缓冲区,如果有,则启动async async

还有一种更简单的方法:使用缓冲和同步I/O。它将比上面描述的异步方法慢,但不是很慢。您可以启动多个线程,并单独遍历每个线程中的列表。每个线程必须只处理一些唯一的键集。例如,您可以使用两个线程,第一个线程只能写入具有奇数键的项,第二个线程必须只写入具有偶数键的项。

票数 0
EN

Stack Overflow用户

发布于 2013-01-10 17:18:28

为此,您需要一个并发模型--不管它听起来多么严重:)

首先,分析哪些是可以同时完成的,哪些是彼此无关的。想象一下,你的程序的每一步都是在不同的机器上执行的,它们之间存在某种通信,比如IP网络。

然后在这些实例(操作/机器)之间绘制一个流。标记需要执行的资源操作,例如列表、文件。将资源标记为单独的实例(与操作和计算机相同)。

将文件系统放在您的图片中,看看是否可以加快单独文件的写入速度,或者它将在文件系统中结束,从而再次序列化。

连接实例。看看你能不能得到什么好处。它可能看起来像这样:

代码语言:javascript
复制
        list
         |
      list reader
        /  \     \
       /    \     ----------\
    file    file          file
   writer  writer        writer
     |        |              |
  file 1    file 2         file 3
     \        /              |
      \      /               |
     file system 1      file system 2

在该示例中,您可以看到获得一些并行执行可能是有意义的

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

https://stackoverflow.com/questions/14253499

复制
相关文章

相似问题

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