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
我正在编写一个解码编码密码的脚本,这样我就可以看到原始密码。问题是顺序代码比多线程代码快。顺序代码持续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