失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > bash shell实现并发多进程操作

bash shell实现并发多进程操作

时间:2021-06-06 11:16:00

相关推荐

bash shell实现并发多进程操作

前言

目前我掌握的基本语言,php(最为熟悉,项目里代码都是用其实现),bash shell(运维利器),c(acm专用),这里面能实现多线程的貌似只有c,但是我c只是用来学习和实现算法和数据结构,因此工作中我想要模拟多进程并发操作,就只能依靠bash shell脚本了

技能点

shell脚本里实现并发操作,需要用到 for循环&后台运行符wait等待所有子进程结束

思路

我们可以通过写一个for循环,控制每次需要批量操作的次数,然后封装一个方法,方法里进行批量操作,并将此方法用&符号放在后台运行每个循环结束前用wait函数,确保当前批量处理操作全部完成

示例

我们准备批量的执行创建目录操作,目录名称为数字,从1开始到100,每次批量创建20个

无并发时

代码如下:

#!/bin/bash#开始时间begin=$(date +%s)#测试根目录root_dir="/home/wzy/wzy_scripts/file_scripts/test"if [ ! -d $root_dir ]; thenmkdir -p $root_dirficd $root_dir#循环创建10000个目录for ((i=0; i<10000; ))domkdir $ii=$(expr $i + 1)done#结束时间end=$(date +%s)spend=$(expr $end - $begin)echo "花费时间为$spend秒"

运行时间:

并发操作

我们每次并发创建200个目录,因此循环执行50次即可实现创建10000个目录的工作

代码如下:

#!/bin/bash#开始时间begin=$(date +%s)#测试根目录root_dir="/home/wzy/wzy_scripts/file_scripts/test"if [ ! -d $root_dir ]; thenmkdir -p $root_dirficd $root_dir#批量创建目录函数function create_dir(){mkdir $1}#循环创建10000个目录count=10000rsnum=200cishu=$(expr $count / $rsnum)for ((i=0; i<$cishu;))dostart_num=$(expr $i \* $rsnum + $i)end_num=$(expr $start_num + $rsnum)for j in `seq $start_num $end_num`docreate_dir $j &donewaiti=$(expr $i + 1)done#结束时间end=$(date +%s)spend=$(expr $end - $begin)echo "花费时间为$spend秒"

主要是分页处理和&以及wait的使用

运行时间:

总结

通过&、wait和for循环来进行并发操作能显著的提高效率,大家可以参考这个方法用在自己的日常工作中,我是在创建多个mysql库的时候掌握了这个方法!

如果觉得《bash shell实现并发多进程操作》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。