C++中多线程文件哈希

C++中多线程文件哈希,c++,multithreading,C++,Multithreading,在一个项目中工作,以提高一个程序的性能,该程序将文件内容散列到标准散列SD5,sha 为了实现这一点,我试图合并多线程,但很难编写代码。任何提示或推荐的阅读资料都将不胜感激!我的代码如下所示 编辑:所以问题是,我如何在代码中使用多线程来加速它,例如,将文件的部分拆分并分配给不同的核心 ) #include <fstream> using namespace std; #include "md5.h" #include "sha256.h" #include

在一个项目中工作,以提高一个程序的性能,该程序将文件内容散列到标准散列SD5,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;
}

很少有有用的哈希函数不是固有的顺序函数,因此多个处理器将没有帮助

如果您的程序打算计算每个文件的多个散列,那么从程序片段中看不出这一点,那么可以并行计算每个散列。在这种情况下,您的主要任务是缓冲区管理,这可能是一个简单的过程,如将整个文件映射到内存中,然后为每个哈希函数分配一个线程


如果你正在寻找并行编程的实践,可以划分的问题是你的朋友。排序就是一个很好的例子:您有N个项目和M个处理器;因此,您可以将ONlgN收缩为O1+N/MlgN/M

您确定是处理而不是文件io导致代码运行缓慢吗?顺便说一句,你忘了问一个问题。如果这是有效的代码,您需要查看,您应该将此移到问题所在?@user463035818是的,正是文件io使代码变慢了,但希望了解更多关于多线程的知识,以及如何在代码中使用多线程。哦,对了,对不起,我会的。谢谢:所以问题是,我如何在代码中使用多线程来加速它,例如,将文件的部分拆分并分配给不同的核心。您首先计划如何分割文件并将部件分配到不同的磁盘?如果磁盘IO是您的瓶颈,那么用更多线程敲击一个磁盘实际上会降低IO性能。。。。有很多教程/示例