【问题标题】:Multithreading File hashing in C++ [closed]C ++中的多线程文件散列[关闭]
【发布时间】:2018-04-20 11:28:15
【问题描述】:

致力于一个项目以提高将文件内容散列为标准散列(md5,sha ...)的程序的性能

我试图结合多线程来实现这一点,但很难编写代码。任何提示或推荐读物将不胜感激!我的代码如下所示

编辑:所以问题是我如何在这段代码中使用多线程来加速它,例如拆分文件的一部分并将它们分配给不同的内核。

;

 #include <fstream>
   using namespace std;
   #include "md5.h"
   #include "sha256.h"
   #include "sha3.h"
   #include <iostream>
int main(int, char**)
{
    cout << "   HASHING ALGORITHMS:" << endl;
    cout << "................................................." << endl << endl;

    MD5 md5;
    SHA256 sha256;
    SHA3 sha3;
    std::string hash1 = md5("enwik8");
    std::cout << "Hash of File: " << md5(hash1) << endl << endl;

    //Next part is to hash the actual content of file. 
    /*
    ifstream myReadFile;
    myReadFile.open("data.txt.txt");

    char output[100];

    if (myReadFile.is_open()) {

        while (!myReadFile.eof()) {

            /*
            myReadFile >> output;
            cout << "Input: " << output << endl << endl;
            sha3(output);
                cout <<"SHA256: ";
                std::cout << sha256(output) << std::endl;
                cout << "SHA3:   ";
            std::cout << sha3(output) << endl << endl; 
        }
        myReadFile.close();
    }
    else {
        cout << "Failed loading file.";
    }

    */


    return 0;
}

【问题讨论】:

  • 您确定是处理而不是文件 io 使您的代码运行缓慢吗?顺便说一句,你忘了问一个问题。如果这是工作代码并且您想要查看,您应该将其移至codereview.stackexchange.com
  • 有什么问题?
  • @user463035818 是的,是文件 io 使代码变慢,但目前希望了解更多关于多线程以及如何在此代码中使用它的知识。哦,对了,抱歉会那样做。谢谢:)
  • 所以问题是我如何在这段代码中使用多线程来加速它,例如拆分文件的一部分并将它们分配给不同的核心。 如何做您首先计划拆分文件并将部分分配到不同的磁盘?如果磁盘 IO 是您的瓶颈,那么用更多线程敲击一个磁盘实际上会降低您的 IO 性能。
  • 看看boost::coroutine....里面有很多教程/例子boost.org/doc/libs/1_67_0/libs/coroutine/doc/html/index.html

标签: c++ multithreading


【解决方案1】:

很少有有用的散列函数本质上不是顺序的,因此多个处理器无济于事。

如果您的程序打算计算每个文件的多个哈希值(从您的程序片段中并不明显),则可以并行计算每个哈希值。在这种情况下,您的主要工作是缓冲区管理,这可能很简单,例如将整个文件映射到内存中,然后为每个哈希函数分派一个线程。

如果您正在寻找并行编程的练习,可以划分的问题是您的朋友。排序就是一个很好的例子:你有 N 个项目和 M 个处理器;所以你可以将 O(Nlg(N)) 缩小到 O((1+N/M)lg(N/M))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-11
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多