美文网首页深度分析
shell并发,并行

shell并发,并行

作者: 小潤澤 | 来源:发表于2020-03-19 20:46 被阅读0次

简介

首先明确,程序在执行的时候是串行执行的,那么在程序执行中往往可以利用并发和并行来优化

那么并发和并行的区别是什么?
并行抓住一个关键词,那就是多个程序是否同时执行
并发并不一定是要同时执行,所以并行是并发的一个子集,并发强调的是系统具有处理多个任务的能力,但不一定要同时;并行也是用于描述统具有处理多个任务的能力,但一定是同时运行

并行

那么我们看下用shell怎么来写并行,这里只介绍一种方法

 #!/bin/bash
 for i in (recurrency)
  do
 {
       express
 } &
done
wait  ##等待所有子后台进程结束

典型的是大括号加&,wait则是等待所有子程序结束

我们看下串行和并行的区别

#!/bin/bash
date
for i in `seq 1 5`
do
 {
     echo "sleep 5"
     sleep 5
 }
done
date

再来看看并行处理

 #!/bin/bash
date
for i in `seq 1 5`
do
 {
     echo "sleep 5"
     sleep 5
 } &
done
wait  ##等待所有子后台进程结束
date

关于输出5个数,我们可以对比下时间,显然并行速度更快

并发

关于并发,我们用建立文件夹为例子
无并发

#!/bin/bash

#开始时间
begin=$(date +%s)

#测试根目录
root_dir="/home/tes1"

if [ ! -d $root_dir ]; then
        mkdir -p $root_dir
fi
cd $root_dir


#循环创建10000个目录
for ((i=0; i<10000; ))
do
        mkdir $i
        i=$(expr $i + 1)
done

#结束时间
end=$(date +%s)
spend=$(expr $end - $begin)
echo "花费时间为$spend秒"

循环建立10000个文件夹,处理时间为


所用时间
结果

现在用并发来看看

#!/bin/bash

#开始时间
begin=$(date +%s)

#测试根目录
root_dir="/home/tes2"

if [ ! -d $root_dir ]; then
        mkdir -p $root_dir
fi
cd $root_dir

#批量创建目录函数
function create_dir()
{

        mkdir $1
}

#循环创建10000个目录
count=10000
rsnum=200
cishu=$(expr $count / $rsnum)

for ((i=0; i<$cishu;))
do
        start_num=$(expr $i \* $rsnum + $i)
        end_num=$(expr $start_num + $rsnum)
        for j in `seq $start_num $end_num`
        do
                create_dir $j &
        done
        wait
        i=$(expr $i + 1)
done

#结束时间
end=$(date +%s)
spend=$(expr $end - $begin)
echo "花费时间为$spend秒"

所用时间

做并发有什么特征呢?比方说我们要建立文件夹,那么就先写一个建立文件夹的函数
以这个例子来看,我们要建立10000个文件夹,那么我们200个为一组,注意那个嵌套循环体:
第一个循环,是200个一组,里面的循环是以200个为一个基数,建立文件夹
我们不妨把start_num输出一下:


添加代码输出

再有就是第二层循环的&,相当于并发建立文件夹(一起建立)wait等待子程序完成,这样速度快一些

参考:https://blog.csdn.net/wzy_1988/article/details/8811153

相关文章

  • shell并发,并行

    简介 首先明确,程序在执行的时候是串行执行的,那么在程序执行中往往可以利用并发和并行来优化 那么并发和并行的区别是...

  • SHELL并发编程

    SHELL的并行编程:通过启用多个并行的后台子进程,实现任务的并行处理。 并发编程的模式: 简单模式 批处理模式 ...

  • 服务器并发设计

    并发与并行 并发技术选型 结构并发 状态并发 集群和负载均衡 并发(Coccurrency)和并行(Paralle...

  • Java并发编程整理之并发与并行概念讲解(1)

    Java并发编程整理之并发与并行概念讲解(1) 并发和并行区别 --[百度]:并发(Concurrent)当有多个...

  • JS异步编程相关知识点

    并发(concurrency)和并行(parallelism)区别 涉及面试题:并发与并行的区别? 并发是宏观概念...

  • Go并发

    并发和并行 Go是并发语言,而不是并行语言。(Go is a concurrent language and no...

  • Golang学习笔记-Goroutines

    并发 首先 go 是一个实现并发的语言,并非并行 并发 vs 并行 并行是在同一时间内,可以同时执行多个任务;并发...

  • 【编程技巧】shell+R双重并行化——加速分析过程

    目录 问题描述shell并行化R并行化shell+R双重并行化实现案例 问题描述 在进行宏基因组shotgun数据...

  • 并发简介

    并发基本概念 并发与并行 并发指的是程序的结构,而并行指的是程序运行时的状态。 何谓并发(concurrency)...

  • [转]并发和并行有什么区别

    做并发编程之前,必须首先理解什么是并发,什么是并行,什么是并发编程,什么是并行编程。 并发(concurrency...

网友评论

    本文标题:shell并发,并行

    本文链接:https://www.haomeiwen.com/subject/xmblyhtx.html