shell多线程之进程间通信(3)
之前的文章依赖是1对1或1多对的,但每个任务的前置任务都只有1个。
本文的核心在于一个任务依赖于多个任务的执行完成,如上图所示,这个任务就是fact,只有new和dviduser两个任务都完成的情况下,fact才能继续执行。
init_pipe.sh
# 初始化file descriptor
init_pipe(){
[ -e /tmp/fd1001 ] || mkfifo /tmp/fd1001
exec <>/tmp/fd1001
rm -rf /tmp/fd1001 [ -e /tmp/fd1002 ] || mkfifo /tmp/fd1002
exec <>/tmp/fd1002
rm -rf /tmp/fd1002 [ -e /tmp/fd1003 ] || mkfifo /tmp/fd1003
exec <>/tmp/fd1003
rm -rf /tmp/fd1003 [ -e /tmp/fd1004 ] || mkfifo /tmp/fd1004
exec <>/tmp/fd1004
rm -rf /tmp/fd1004 [ -e /tmp/fd1005 ] || mkfifo /tmp/fd1005
exec <>/tmp/fd1005
rm -rf /tmp/fd1005 [ -e /tmp/fd1006 ] || mkfifo /tmp/fd1006
exec <>/tmp/fd1006
rm -rf /tmp/fd1006 [ -e /tmp/fd1007 ] || mkfifo /tmp/fd1007
exec <>/tmp/fd1007
rm -rf /tmp/fd1007
} destroy_pipe(){
exec <&-
exec >&-
exec <&-
exec >&-
exec <&-
exec >&-
exec <&-
exec >&-
exec >&-
exec <&-
exec <&-
exec >&-
exec >&-
exec <&-
}
work.sh
# 初始化file descriptor . init_pipe.sh
. sql_lib.sh
################################################################
newFun(){
start_day=$
end_day=$ while [ ${start_day} -le ${end_day} ]
do day=`date +"%Y-%m-%d" -d "${start_day}"` echo "${new_sql//_day_/${day}}"
hive -e "${new_sql//_day_/${day}}"
echo ${start_day} >&
start_day=`date +"%Y%m%d" -d "${start_day} 1 days" `
done
}
################################################################
factFun(){
start_day=$
end_day=$ while [ ${start_day} -le ${end_day} ]
do day=`date +"%Y-%m-%d" -d "${start_day}"` read -u j
read -u k
if [ ${start_day} -le $j -a ${start_day} -le $k ];then
echo "${fact_sql//_day_/${day}}"
hive -e "${fact_sql//_day_/${day}}"
echo ${start_day}>&
echo ${start_day}>&
echo ${start_day}>&
fi
start_day=`date +"%Y%m%d" -d "${start_day} 1 days" `
done
} ################################################################
dvidUserIdFun(){
start_day=$
end_day=$ while [ ${start_day} -le ${end_day} ]
do
day=`date +"%Y-%m-%d" -d "${start_day}"` echo "${dvid_user_id_sql//_day_/${day}}"
hive -e "${dvid_user_id_sql//_day_/${day}}"
echo ${start_day}>&
echo ${start_day}>&
echo ${start_day}>&
start_day=`date +"%Y%m%d" -d "${start_day} 1 days" `
done
} init_pipe newFun "${start}" "${end}" &
factFun "${start}" "${end}" &
dvidUserIdFun "${start}" "${end}" & wait destroy_pipe
shell多线程之进程间通信(3)的更多相关文章
- shell多线程之进程间通信(2)
工作中往往遇到这种情况,有许多任务,依次执行比较浪费时间,由于任务之间有依赖关系,简单的并发执行又不行. 就如同下面这种情况,任务new和dvidUser是可以并发执行的,fact任务依赖于new任务 ...
- shell多线程之进程间通信
# 这是一个简单的并发程序,有如下要求: # .有两个程序a和b,希望他们能并发执行,以节约时间 # .a和b都是按照日期顺序执行,但b每日程序的前提条件是当日a的程序已经执行完毕 #解决方案: # ...
- [shell进阶]——shell多线程
关于shell的多线程 1. 多线程并发执行任务,而不用一台台的串行执行,能更快更高效 2. Shell并没有多线程的概念,所以: * 一般使用wait.read等命令技巧性地模拟多线程实 * 使用命 ...
- shell多线程,wait
文章来源,wait的使用效果还是不错的 最近在使用shell做一些部署工作,在使用过程中,效率一直不高.想提高效率,经过分析发现,并不是所有操作都是需要串行的,一些操作是可以进行并行操作的.经过学习, ...
- shell多线程(2)之基于管道实现并发
在shell脚本里批量执行程序是比较常见的方式,如果程序很多,每个执行时间比较长,则顺序执行需要花费大量的时间. 此时并发就成为我们考虑的方向. 上篇<shell多线程>中我们已经简单实现 ...
- linux shell 多线程执行程序
Shell中并没有真正意义的多线程,要实现多线程可以启动多个后端进程,最大程度利用cpu性能. 直接看代码示例吧. (1) 顺序执行的代码 #!/bin/bash date ` do { echo & ...
- Unix/Linux编程实践教程(二:socket、多线程、进程间通信)
同一接口不同的数据源: 协同进程: fdopen以文件描述符为参数: fopen和popen: 为了实现popen,必须在子进程中调用sh,因为只有shell本身即/bin/sh可以运行任意shell ...
- [转]linux shell 多线程实现
情景 shell脚本的执行效率虽高,但当任务量巨大时仍然需要较长的时间,尤其是需要执行一大批的命令时.因为默认情况下,shell脚本中的命令是串行执行的.如果这些命令相互之间是独立的,则可以使用“并发 ...
- shell 命名管道,进程间通信
命名管道基础 命名管道也被称为FIFO文件, 在文件系统中是可见的,并且跟其它文件一样可以读写! 命名管道特点: 当写进程向管道中写数据的时候,如果没有进程读取这些数据,写进程会堵塞 当读取管道中的数 ...
随机推荐
- 关于CORS跨域更细节的思考
权威的资料看MDN,也可以看阮一峰的文章.不过感觉阮一峰对于CORS的描述有问题,简单请求被阮一峰描述为2次浏览器请求了.这个要自己搭个服务器试一下.跨域基本都是根据域名判断的,自己是否要再买个域名呢 ...
- JSP页面中taglib的uri设置
今天遇到这样一个问题,使用JAVA做了个WEB应用,其中用到一个自定义标签.该标签的class文件与tld(tld文件中,uri定义为:http://wallimn.iteye.com/myfuncs ...
- Android之高仿手机QQ聊天
源代码下载 转载请注明出处,谢谢! 最终版已上传.优化下拉刷新.增加来消息声音提示.主界面改成ViewPager,实现左右滑动.新增群组.最近会话显示条数,开始上班了,不再修改了.谢谢! 国庆这几天, ...
- PHP中的加密方式有如下几种
1. MD5加密 string md5 ( string $str [, bool $raw_output = false ] ) 参数 str -- 原始字符串. raw_output -- ...
- hx计算机基础
参考:http://python.jobbole.com/82294/ https://www.jianshu.com/p/aed6067eeac9 1. 操作系统基础题 1)在32位操作系统下,系统 ...
- LockWindowUpdate的函数的用法
Application.ProcessMessages;LockWindowUpdate(Self.Handle); //锁住当前窗口 LockWindowUpdate(0)//解除锁定窗口 Lock ...
- Chrome扩展,应用开发学习笔记之2---恶搞百度一下
Chrome扩展,应用开发学习笔记之2 恶搞百度一下 前面我们介绍了一个最简单的chrome扩展时钟,如今我来介绍一下一个恶搞百度一下的chrome扩展程序. 前面说过,manifest.json文件 ...
- NYOJ781 又见回文数
又见回文数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 冷淡的回文数被水了,各种被水,然后他非常生气,然后... 一个数从左边读和从右边读一样,就说这个数是回文数 ...
- 《Linux Device Drivers》第十一章 核心数据类型——note
基本介绍 因为Linux多平台特性,不管是哪一个重要驱动力应该是便携 与内核代码相关的核心问题应该是访问的同时是数据项的已知长度.能力和利用不同的处理器 内核使用的数据类型主要分为三类 类似int这种 ...
- 【树转数组】poj1195
/* 二维的树状数组: 更新某个元素时: NO.1:c[n1],c[n2],c[n3],....,c[nm]; 当中n1 = i,n(i+1) = ni+lowbit(ni); nm+lowbit(n ...