标签归档:shell 多线程

改善shell加速实现统计优酷会员数

改善shell使其更快统计出优酷会员数,你可能想到了,我可能用模拟多线程的方法解决这个问题。

接下来我贴出单线程的代码(比上篇文章多个功能就是计算shell运行时间)

start=`date +%s`    #计算时间
declare i
declare youku_content
 
 
for i in $(seq 1 100)
do
 
	base64_uid=`echo $i | perl -e 'use MIME::Base64; $_ = encode_base64(<>); print;'`
	url="http://i.youku.com/u/U${base64_uid}"
	echo $i $url
	mytest=`GET "$url"`
	vipsuper=`echo ${mytest%subscribe_pNode*}|grep ico__vipsuper`
	if [ "$vipsuper" != "" ]
	then
		vip_youku=$[$vip_youku+1]
		echo "youku id:$i vip youku sum:$vip_youku"
	fi
 
done
end=`date +%s`  #计算时间
dif=$[$end-$start]
echo $dif  #输出时间

输出结果如下:

用时107

接下来我用多线程实现的代码:

start=`date +%s`
declare i
declare youku_content
declare mod
declare threads=10  #设置线程数
declare vip_youku=0
 
for ((count=1;count<=100;count++))
do
 
	base64_uid=`echo $count | perl -e 'use MIME::Base64; $_ = encode_base64(<>); print;'`
	url="http://i.youku.com/u/U${base64_uid}"
	echo $count  $url
	{
	mytest=`GET $url`
	vipsuper=`echo ${mytest%subscribe_pNode*}|grep ico__vipsuper`
	if [ "$vipsuper" != "" ]
	then
		#vip_youku=$[$vip_youku+1]
		#echo "youku id:$count  vip_sum:$vip_youku"
	fi
	} &
	mod=$(( $count%$threads ))  
	if [ "$mod" -eq "0" ]
	then
		wait  
	fi
done
end=`date +%s`
dif=$[$end-$start]
echo $dif

输出结果如下:

用时30

通过上面2个图片结果可以看出来,多线程在时间上是很有优势的。