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

原始的代码:

 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/shellTHREAD_NUM=3
#定义描述符为9的管道
mkfifo tmp
exec 9<>tmp
#预先写入指定数量的换行符,一个换行符代表一个进程
for ((i=0;i<$THREAD_NUM;i++))
doecho -ne "\n" 1>&9
donefunction getdir(){for element in `ls $1`do{read -u 9{#echo $elementdir_or_file=$1$element#echo $dir_or_fileif [ -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}&}donewait
}
root_dir=""
getdir $root_dir

参考来源:

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

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

Shell(6): 多线程操作及线程数相关推荐

  1. Shell多线程操作及线程数控制实例

    来源:http://www.jb51.net/article/51720.htm 这篇文章主要介绍了Shell多线程操作及线程数控制实例,文中从单线程实现一个需求开始,不断加入代码实现多线程以及线程数 ...

  2. linux脚本多线程,Shell多线程操作及线程数控制实例

    前言 在业务开发过程中,经常会在后台写一些shell脚本处理数据,但估计很多人不知道shell脚本也可以支持多线程,而且非常简单.本篇文章主要就是介绍shell实现多进程以及进程数量控制. 需求 为了 ...

  3. Python继承类的方式实现多线程及控制线程数

    继承threading.Thread,并重写run方法实现多线程,这里用到logging日志模块是为了输出好看一些,直接print的话会几行叠在一起,不好看: 1 2 3 4 5 6 7 8 9 10 ...

  4. Qt 多线程基础及线程使用方式

    文章目录 Qt 多线程操作 2.线程类QThread 3.多线程使用:方式一 4.多线程使用:方式二 5.Qt 线程池的使用 Qt 多线程操作 应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一 ...

  5. ITK:设置默认的线程数

    ITK:设置默认的线程数 内容提要 输出结果 C++实现代码 内容提要 设置多线程的默认线程数. 还可以通过环境变量ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS设置默认线程 ...

  6. 最佳线程数和QPS以及RT

    最近学习性能优化方面的东西,所以,总结一下: 名词解释 QPS:系统每秒处理的请求数(query per second) RT:系统的响应时间,一个请求的响应时间,也可以是一段时间的平均值. 最佳线程 ...

  7. Linux C :线程操作和线程同步的多线程并发编程

    在这之前可以先看看这边文章了解线程概念,信号量,条件变量,死锁.管程等概念 https://blog.csdn.net/superSmart_Dong/article/details/11666837 ...

  8. 多线程 空值线程数_【开发者成长】深入理解多线程编程

    云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 为什么要使用多线程? 防止并发编程出错最好的办法就是不写并发程序 既然多线程编程容易出错,为什么它 ...

  9. pg多线程更新会发生死锁_何时用多线程?多线程需要加锁吗?线程数多少最合理?...

    一.什么时候应该使用多线程? 今天看到一个问题,突然有感而发,想聊下这个话题. 不知道大家有没有想过这个问题,就是什么时候我该使用多线程呢?使用多线程就一定会提升系统性能吗? 1.其实是否应该使用多线 ...

最新文章

  1. 菜鸡记录-王爽-汇编语言-实验十(编写子程序-解决除法溢出)
  2. java中ssh如何理解
  3. 138 条 Vim 命令、操作、快捷键全集
  4. 09、组策略之软件分发(05)
  5. 4 种大学生兼职,助你走向经济独立!
  6. 关于golang的append函数的踩坑
  7. html推箱子怎么清除走过的,第九讲:HTML5该canvas推箱子原型实现
  8. 格密码教程(三):基础域概念,体积等;阿达马不等式,行列式
  9. 智能型炉温测试仪kic x5软件,X5系列_KIC-7通道/9通道/12通道炉温测试仪
  10. Nginx(一)-- 初体验
  11. 中国超级计算机扩大领先优势:TOP500总量首次超越美国
  12. OpenGL基础24:聚光灯
  13. 【嵌入式】第一次大作业_记录环境温度并存入数据库
  14. Flash 第八章 形状补间
  15. firefox如何下载播放的视频
  16. 【scrapy】scrapy按分类爬取豆瓣电影基础信息
  17. 23个海外求职找各种工作的招聘网站
  18. 阿尔伯塔大学计算机专业世界排名,加拿大学生最满意的TOP20大学排名
  19. android 字体修改颜色代码,Android SearchView 修改字体颜色
  20. 2.1微信小程序简介

热门文章

  1. 前嗅ForeSpider教程:采集图片/视频/资源文件的链接地址 1
  2. c#.net利用RNGCryptoServiceProvider产生任意范围强随机数的办法
  3. IOS中延时执行的几种方式的比较
  4. Linux平台 Oracle 11gR2 RAC安装Part1:准备工作
  5. vMotion、SvMotion、HA和FT的详细对比说明
  6. java 对象访问权限_Java面向对象--访问权限
  7. java(21) - 注解详解
  8. Java学习系列(十七)Java面向对象之开发聊天工具
  9. 需要使用Git branch switch 的情况Git stash的使用时机
  10. Visio 中如何画实现接口的连线