小编Nyb*_*ble的帖子

并行I / O SSD与HDD的惊人结果

关于并行I / O的一些测试中发生了一个非常奇怪的情况。这是一种情况。我有多个线程将文件处理程序打开到同一文件,并从文件的多个位置(均匀间隔)读取有限数量的字节并将其转储到数组中。所有这些都是通过增强线程完成的。现在,我假设由于随机访问的原因,HDD应该更慢。这就是为什么我的测试实际上针对SSD的原因。事实证明,与HDD相比,从固态磁盘读取同一文件时,几乎没有任何加速。想知道问题可能是什么?这对我来说是否真的很令人惊讶/我也在下面发布了我的代码以查看我的实际工作:

    void readFunctor(std::string pathToFile, size_t filePos, BYTE* buffer, size_t buffPos, size_t dataLn, boost::barrier& barier) {

        FILE* pFile;
        pFile = fopen(pathToFile.c_str(), "rb");

        fseek(pFile, filePos, SEEK_SET);
        fread(buffer, sizeof(BYTE), dataLn, pFile);

        fclose(pFile);
        barier.wait();

    }

    void joinAllThreads(std::vector<boost::shared_ptr<boost::thread> > &threads) {

        for (std::vector<boost::shared_ptr<boost::thread> >::iterator it = threads.begin(); it != threads.end(); ++it) {
            (*it).get()->join();

        }

    }

    void readDataInParallel(BYTE* buffer, std::string pathToFile, size_t lenOfData, size_t numThreads) {
        std::vector<boost::shared_ptr<boost::thread> > threads;
        boost::barrier barier(numThreads);
        size_t dataPerThread = lenOfData / numThreads;

        for (int var = 0; var < …
Run Code Online (Sandbox Code Playgroud)

c c++ io parallel-processing solid-state-drive

5
推荐指数
3
解决办法
5071
查看次数

添加引用和数字值时理解(自动?)Deref /强制

如何理解下面这段代码?我是Rust的新手,但有C/Haskell背景和一点点C++.我能找到的唯一参考是减轻强制.

fn main() {
    let xs: [u32; 4] = [0, 1, 2, 3];
    let mut i: u32 = 0;
    for x in xs.iter() {
        if i > *x {     // It looks x is an iterator. Understood.            
            i = i + x;  // no error. (coerced)
                        //Quote: "Rust will do this as many times
                        //       as possible until the types match."
            i = i + *x; // no error (explicit deref)
            i += x;     // error about u32/&u32 …
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
1
解决办法
624
查看次数

缺少实例错误,模块加载和GHCi

它来自另一个问题,但情况发生了变化.

Parsec函数'parse'的类型签名和类'Stream'

我现在想知道如何import做出与众不同的事情.


文件:RunParse.hs

module RunParse where
import System.IO
import Data.Functor.Identity (Identity)
----import Text.Parsec ()     ....................(1)
----import Text.Parsec        ....................(2)
import Text.Parsec.Prim (Parsec, parse, Stream)

runIOParse :: (Show a) => Parsec String () a -> String -> IO ()
runIOParse pa fn =
  do
    inh <- openFile fn ReadMode
    outh <- openFile (fn ++ ".parseout") WriteMode
    instr <- hGetContents inh
    let result = case parse pa fn instr of
                   Right rs -> show rs
                   Left err -> "error"
    hPutStr …
Run Code Online (Sandbox Code Playgroud)

import haskell ghci

4
推荐指数
1
解决办法
419
查看次数

有没有更好的方法在赋值后将变量强制转换为'const'?

我总是const用来保护不应该分配的值.无论如何,在某些情况下,我可能需要初始化变量,然后const在同一函数中将其用作值.例如:

void foo() {
  int flags;
  /* ... */
  if (condition1) 
      flags |= 1;
  /* .... */
  if (conditionX)
      flags |= Y;
  /* .... */
  // start using flags as a const value
  const flags; // <<= I want something like this.
  const int c_flags = flags; // <<= What I have to do. The naming is annoying.
  /* ... */
}
Run Code Online (Sandbox Code Playgroud)

有没有办法改善这个?可以是编码样式或高级语言功能.


从@Potatoswatter:对于gcc/clang中的C(gnu样式,比方说,-std = gnu11),可以使用Statement Expression.

foo() {
  const int flags = ({
    int f …
Run Code Online (Sandbox Code Playgroud)

c

3
推荐指数
2
解决办法
129
查看次数

标签 统计

c ×2

c++ ×1

ghci ×1

haskell ×1

import ×1

io ×1

parallel-processing ×1

rust ×1

solid-state-drive ×1