C ++中的多线程文件散列[关闭]

Posted

技术标签:

【中文标题】C ++中的多线程文件散列[关闭]【英文标题】:Multithreading File hashing in C++ [closed] 【发布时间】: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 【参考方案1】:

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

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

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

【讨论】:

以上是关于C ++中的多线程文件散列[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何限制Java程序中的多线程?

C/C++ 中的多线程状态机实现

我想把数据能保存到文件中又能保存到数据库中,用java的多线程如何实现这个功能

iOS目标C中的多线程

[多线程]C++11多线程用法整理

现代 CPU 中的多线程旧遗留应用程序 [关闭]