【问题标题】:how to speed up openssl generate md5 checksum如何加快openssl生成md5校验和
【发布时间】:2015-01-27 04:04:37
【问题描述】:

我遇到一个问题,在AIX平台,我们使用命令生成校验和:

示例:

exec 0<list
while read line 
do
openssl md5 $line >> checksum.out
done

但这会持续很长时间。我发现我们的 cpus 仍然有免费资源。 这是运行多线程的openssl md5吗?如果不是,我如何让它通过多线程运行,或者使用其他方法来加速它。

最好的问候

无效

【问题讨论】:

    标签: multithreading openssl md5 checksum aix


    【解决方案1】:

    如果我从this question 的答案和 cmets 中理解正确,则无法完成,因为散列算法中的步骤之间存在依赖关系(我猜如果通常可能的话,OpenSSL 将具有多线程实现) .

    但是,您始终可以通过并行启动 nopenssl md5 实例来并行化任务。

    例如(假设 n = 4 个线程)

    while read line; do
      openssl md5 $line >> checksum.out0 &
      openssl md5 $(read) >> checksum.out1 &
      openssl md5 $(read) >> checksum.out2 &
      openssl md5 $(read) >> checksum.out3
    done
    

    如果您想保持准确数量的线程同时运行,最后一个不应在后台运行。此外,您可能希望确保不同的行需要大约相同的时间才能完成,这样您就不会遇到竞争条件。

    这个例子也没有经过真正的测试(使用$(read)),并且可能有更好的方法来做到这一点(例如让每个实例将其输出写入一个单独的文件,然后将它们全部连接起来 - 例如cat checksum.out* &gt; checksum.out ),但它应该足以帮助您入门。

    编辑: 我刚刚进行了测试,read 按我希望的方式工作,因此通过为openssl md5 的每个实例创建一个新的输出文件,并在末尾增加数字(例如通过包含一个计数器变量),您可以在脚本的结尾将输出分类到单个文件中。

    生成的脚本:

    exec 0<list
    COUNT=0
    while read line; do
      openssl md5 $line >> checksum.out$((COUNT++)) &
      openssl md5 $(read) >> checksum.out$((COUNT++)) &
      openssl md5 $(read) >> checksum.out$((COUNT++)) &
      openssl md5 $(read) >> checksum.out$((COUNT++))
    done
    cat checksum.out* > checksum.out
    

    应该做的伎俩(只记得清理所有临时文件之后......)

    【讨论】:

    • 谢谢。你是对的。这应该是多线程支持的问题。但是我已经换了几个月的工作了……所以不能再测试了,因为我没有机器……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    相关资源
    最近更新 更多