zoukankan      html  css  js  c++  java
  • Shell(6): 多线程操作及线程数

    任务需要:当我需要对一个文件夹中的文件,分别压缩的时候:

    原始的代码:

     1 #!/usr/bin/shell
     2 function getdir(){
     3     for element in `ls $1`
     4     do
     5         #echo $element
     6         dir_or_file=$1$element
     7 
     8         #echo $dir_or_file
     9         if [ -d $dir_or_file ]
    10         then
    11             #echo tar cvf tar_data/$element.tar $dir_or_file
    12             `zip -q -r ../tar_data/$element.zip $dir_or_file`
    13         fi
    14     done
    15 }
    16 root_dir=""
    17 getdir $root_dir

    多线程压缩的代码:

    改成多线程实现非常简单,只需要在do后面的大括号加 & 符号,在done后面加一个wait,表示父进程等待子进程退出后再退出。

    在linux中,在命令的末尾加上&符号,则表示该命令将在后台执行,这样后面的命令不用等待前面的命令执行完就可以开始执行了。示例中的循环体内有多条命令,则可以以{}括起来,在大括号后面添加&符号。

     1 #!/usr/bin/shell
     2 function getdir(){
     3     for element in `ls $1`
     4     do
     5     {
     6         #echo $element
     7         dir_or_file=$1$element
     8 
     9         #echo $dir_or_file
    10         if [ -d $dir_or_file ]
    11         then
    12             #echo tar cvf tar_data/$element.tar $dir_or_file
    13             `zip -q -r ../tar_data/$element.zip $dir_or_file`
    14         fi
    15     }&
    16     done 
    17     wait
    18 }
    19 root_dir=""
    20 getdir $root_dir

    控制多线程个数的代码:

    #!/usr/bin/shell
    
    THREAD_NUM=3
    #定义描述符为9的管道
    mkfifo tmp
    exec 9<>tmp
    #预先写入指定数量的换行符,一个换行符代表一个进程
    for ((i=0;i<$THREAD_NUM;i++))
    do
        echo -ne "
    " 1>&9
    done
    
    function getdir(){
        for element in `ls $1`
        do
        {
            read -u 9
            {
                #echo $element
                dir_or_file=$1$element
    
                #echo $dir_or_file
                if [ -d $dir_or_file ]
                then
                    #echo tar cvf tar_data/$element.tar $dir_or_file
                    `zip -q -r ../tar_data/$element.zip $dir_or_file`
                fi
             }&
        }
        done
        wait
    }
    root_dir=""
    getdir $root_dir

    参考来源:

    http://www.cnblogs.com/signjing/p/7074778.html

    http://m.jb51.net/article/51720.htm

  • 相关阅读:
    pytorch环境配置
    Java Review(三十八、网络编程)
    Java Review(三十六、IO)
    Java Review(三十五、注解)
    Java Review(三十四、JDBC)
    Java Review(三十三、异常处理----补充:断言、日志、调试)
    Java Review(三十二、异常处理)
    Java Review(三十一、泛型)
    Java Review (三十、集合----- 操作集合的工具类: Collections)
    Java Review (二十八、集合----- Queue 集合)
  • 原文地址:https://www.cnblogs.com/lovychen/p/7735668.html
Copyright © 2011-2022 走看看