分别用python和shell写一个多线程脚本执行1~6.sh脚本(多线程数设置为 2),6个脚本执行耗时不一样,可以得出结论:
shell多线程的线程之间互不阻塞,python多线程的线程之间互相阻塞。
1、python多线程
#!/usr/bin/env python
import os
from multiprocessing import Pool
_pool = Pool(processes = 2)
for i in range(1,7):
a = os.system('sh /data/.trash/%s.sh' %i)
print(i)
_pool.close()
_pool.join()
2、shell多线程
#!/bin/bash
start_time=`date +%s` #定义脚本运行的开始时间
[ -e /tmp/fd1 ] || mkfifo /tmp/fd1 #创建有名管道
exec 3<>/tmp/fd1 #创建文件描述符,以可读(<)可写(>)的方式关联管道文件,这时候文件描述符3就有了有名管道文件的所有特性
rm -rf /tmp/fd1 #关联后的文件描述符拥有管道文件的所有特性,所以这时候管道文件可以删除,我们留下文件描述符来用就可以了
for ((i=1;i<=2;i++))
do
echo >&3 #&3代表引用文件描述符3,这条命令代表往管道里面放入了一个"令牌"
done
for ((i=1;i<=6;i++))
do
read -u3 #代表从管道中读取一个令牌
{
/bin/bash /data/.trash/$i.sh
echo 'success'$i
echo >&3 #代表我这一次命令执行到最后,把令牌放回管道
}&
done
wait
stop_time=`date +%s` #定义脚本运行的结束时间
echo "TIME:`expr $stop_time - $start_time`"
exec 3<&- #关闭文件描述符的读
exec 3>&- #关闭文件描述符的写
本文只在特定环境测试,如有争议的地方欢迎指正哈!