Bash 多线程速度问题

Bash multithread speed issue

我正在编写一个解码编码密码的脚本,这样我就可以看到原始密码。问题是顺序代码比多线程代码快。顺序代码持续12秒,多线程持续20秒。为什么?

我在基本 OS 64 位 (ubuntu 14.04) 上执行,配备 8 GB Ram + i5-2450M (4CPU ~ 2,4Ghz) + SSD。

顺序码。

#!/bin/bash

space="a b c d e f g h i j k l m n o p q r s t u v w x y z"

if [  $# -le 1 ]
then 
    echo "Ussage: " [=11=] SALT PASSWORD_CODED
    exit
fi
echo 
echo 
for i in $space
do
for j in $space
do
for k in $space
do
    #echo $i$j$k
    variable=$(openssl passwd -crypt -salt "" "$i$j$k")
    if [ "$variable" =  ]
        then
        echo password found: $i$j$k
        exit
    fi
done
done
done

多线程代码。

space="a b c d e f g h i j k l m n o p q r s t u v w x y z"

if [  $# -le 1 ]
then 
    echo "Ussage: " [=12=] SALT PASSWORD_CODED
    exit
fi

calculate1 () 
{
    for i in $space
    do
    for j in $space
    do
    for k in $space
    do
        variable=$(openssl passwd -crypt -salt "" "$k$j$i")
        if [ "$variable" =  ]
            then
            echo password found: $k$j$i
            date
            exit
        fi
    done
    done
    done
}

calculate2 () 
{
    for i in $space
    do
    for j in $space
    do
    for k in $space
    do
        variable2=$(openssl passwd -crypt -salt "" "$i$j$k")
        if [ "$variable2" =  ]
            then
            echo password found: $i$j$k
            date
            exit
        fi
    done
    done
    done
}

date
calculate1   &
calculate2   &

echo waiting
wait

为什么单线程和顺序代码更快?

我可以使用 C 代码代替 bash 吗? 与 C 语言中的 variable2=$(openssl passwd -crypt -salt "" "$i$j$k") 有何相似之处?

在 26 个进程之间划分工作的示例:

#!/bin/bash

s=""; p=""
printf -v space "%s " {a..z}
echo $s $p

calc() {
  for j in $space; do
    for k in $space; do
      variable=$(openssl passwd -crypt -salt "$s" "$i$j$k")
      if [ "$variable" = "$s$p" ]; then
        echo password found: $i$j$k
        return
      fi
    done
  done
}

for i in $space; do
  calc &
done

wait

测试:./script.sh 6 AGuqwGE0gkDg

输出:

6 AGuqwGE0gkDg
password found: xde