一个在Linux下模拟多线程的并发的方法,使用这个方法可以同时批量在定义数量的服务器上执行相关命令,比起普通for/while循环只能顺序一条一条执行的效率高非常多。
1、不使用多线程的情况
/Users/nisj/PycharmProjects/BiDataProc/UserPortrait/user_portrait_view_singleThread.sh
2、使用多线程情况
/Users/nisj/PycharmProjects/BiDataProc/UserPortrait/user_portrait_view_moreThread.sh
3、多线程说明
使用'&'+wait 实现“多进程”实现
Shell中并没有真正意义的多线程,要实现多线程可以启动多个后端进程,最大程度利用cpu性能。
1、不使用多线程的情况
/Users/nisj/PycharmProjects/BiDataProc/UserPortrait/user_portrait_view_singleThread.sh
#!/usr/bin/env bash
date
for indexCalc_sqlFile in /home/hadoop/nisj/UserPortrait/indexCalc-view-by*.sql
do
{
echo $indexCalc_sqlFile
sleep 3
}
done
echo '/home/hadoop/nisj/UserPortrait/indexCalc-view-historyBehavior.sql'
sleep 3
date
调试结果示例:[hadoop@emr-worker-9 UserPortrait]$ sh user_portrait_view_singleThread.sh
Fri Mar 3 16:22:18 CST 2017
/home/hadoop/nisj/UserPortrait/indexCalc-view-byGameId.sql
/home/hadoop/nisj/UserPortrait/indexCalc-view-byRoomId.sql
/home/hadoop/nisj/UserPortrait/indexCalc-view-byTagId.sql
/home/hadoop/nisj/UserPortrait/indexCalc-view-byUidOnly.sql
/home/hadoop/nisj/UserPortrait/indexCalc-view-historyBehavior.sql
Fri Mar 3 16:22:33 CST 2017
2、使用多线程情况
/Users/nisj/PycharmProjects/BiDataProc/UserPortrait/user_portrait_view_moreThread.sh
#!/usr/bin/env bash
date
for indexCalc_sqlFile in /home/hadoop/nisj/UserPortrait/indexCalc-view-by*.sql
do
{
echo $indexCalc_sqlFile
sleep 3
} &
done
wait
echo '/home/hadoop/nisj/UserPortrait/indexCalc-view-historyBehavior.sql'
sleep 3
date
调试结果示例:[hadoop@emr-worker-9 UserPortrait]$ sh user_portrait_view_moreThread.sh
Fri Mar 3 16:26:00 CST 2017
/home/hadoop/nisj/UserPortrait/indexCalc-view-byGameId.sql
/home/hadoop/nisj/UserPortrait/indexCalc-view-byRoomId.sql
/home/hadoop/nisj/UserPortrait/indexCalc-view-byTagId.sql
/home/hadoop/nisj/UserPortrait/indexCalc-view-byUidOnly.sql
/home/hadoop/nisj/UserPortrait/indexCalc-view-historyBehavior.sql
Fri Mar 3 16:26:06 CST 2017
3、多线程说明
使用'&'+wait 实现“多进程”实现
Shell中并没有真正意义的多线程,要实现多线程可以启动多个后端进程,最大程度利用cpu性能。