【问题标题】:Several cores writing in a single file?几个核心写入一个文件?
【发布时间】:2014-02-20 12:38:22
【问题描述】:

我一直在编写将输出存储在文件中的多线程模拟。到目前为止,我从一开始就为核心分配了一个文件(带有ofstream myfiles[NUMBER_OF_CORES]),但它有点混乱,因为我正在使用多台具有 20 多个核心的计算机。如果使用一个文件,我一直在这样做以避免开销,但我可以使用每个核心的流之类的东西,最后,使用类似的东西:

for(int i =0; i < NUMBER_OF_CORES; i++){
  myfile << CORE_STREAM[i];
  }

CORE_STREAM[NUMBER_OF_CORES] 数组开始?我从来没有以这种方式操纵流。如果存在,我应该从哪个类构造它?

【问题讨论】:

    标签: c++ file stream


    【解决方案1】:

    您可以使用ostringstream 将中间结果存储在内存中。与ofstream 一样,它实现了ostream 接口,因此您现有的代码可能会按原样工作。

    要将一个流转储到另一个流上,您可以使用myfile &lt;&lt; core_stream[i].rdbuf()。 = 读取缓冲区

    【讨论】:

      【解决方案2】:

      您是否考虑过使用ZMQ 管道?您的模拟线程可以写入 ZMQ_PUSH 套接字(请参阅zmq_socket(3)),而写入文件的任何内容(另一个线程或进程,ZMQ 不关心)都可以从 ZMQ_PULL 套接字读取。这样一来,您的模拟线程就有可能摆脱任何阻塞 IO,而无需将结果暂存到内存中。我无法想象这些天从事分布式计算项目而不使用 ZMQ。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-19
        • 1970-01-01
        • 2011-12-27
        • 2023-03-14
        • 2018-12-19
        • 2023-03-11
        • 2021-06-21
        相关资源
        最近更新 更多