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 ++中的多线程文件散列[关闭]的主要内容,如果未能解决你的问题,请参考以下文章