bash fifo管道使用测试例子

碰到一个场景:

一个脚本内起了多个后台线程,往一个日志文件写日志,结果因为线程之间争抢写锁,导致脚本执行效率很低,为了解决这个问题,希望减少写锁的争抢,尝试使用fifo解决该问题,以下是实验用例子。

#!/bin/bashfifo_file=fifo.pipe
mkfifo $fifo_file
exec 6<>$fifo_file
rm $fifo_file
# 随便一个写了一个生成数据的函数
DateWrite ()
{
    i=0
    while [ $i -lt 1000 ]
    do
        str=`date`
        i=$(( i+1 ))
        echo "$i $str"
    done
}
# 起100个后台线程,往管道写数据
for  (( i=0; i<100; i++ ))
do
     ( DateWrite >&6 ) &
done

#以下逻辑用于一直从管道中读取数据
while read date_time
do
    echo $date_time >> output.file
done <&6
时间: 2024-10-28 19:51:26

bash fifo管道使用测试例子的相关文章

命名管道-简单的例子

#include "stdafx.h" #include<iostream> #include<windows.h> #include<ctime> using namespace std; DWORD WINAPI thread1(LPVOID param) { char buf[256]; DWORD rlen=0; HANDLE hPipe = CreateNamedPipe(TEXT("\\\\.\\Pipe\\mypipe&quo

实际测试例子+源码分析的方式解剖MyBatis缓存的概念

前言: 前方高能! 本文内容有点多,通过实际测试例子+源码分析的方式解剖MyBatis缓存的概念,对这方面有兴趣的小伙伴请继续看下去~ MyBatis缓存介绍首先看一段wiki上关于MyBatis缓存的介绍: MyBatis支持声明式数据缓存(declarative data caching).当一条SQL语句被标记为"可缓存"后,首次执行它时从数据库获取的所有数据会被存储在一段高速缓存中,今后执行这条语句时就会从高速缓存中读取结果,而不是再次命中数据库.MyBatis提供了默认下基于

谢烟客---------Linux之Bash基础特性条件测试&&自定义退出状态码(6)

条件测试 判断某需求是否满足,需要由测试机制来实现. 根据命令的执行状态结果,表达不同的测试条件 1.根据id命令的执行状态结果,判断用户是否存在 [[email protected] ~]# id root uid=0(root) gid=0(root) groups=0(root) [[email protected] ~]# echo $? 0 [[email protected] ~]# id help id: help: no such user [[email protected] 

为初学者写三层,三层的搭建和测试例子

三层搭建过程   第一步打开vs,然后点击新建—---项目—----其它项目类型-------空白解决方案.如下图! (备注右上角是你建立的版本是3.5 的还是2.0的,这里选择的是3.5的) 注意1:名称可以重命名,这个地方我命名的是Test_Example. 注意2:存放位置自己选择一个新路径,便于以后的查找.   然后点击确认按钮提交: 这样出现一个下图的空白解决方案.   第二步:我们建立一个数据访问层:首先如上图中选中空白解决方案,然后右键----添加-----  然后选择新建项目--

thrift windows vs2013测试例子

首先需要编译thrift的compiler 源代码目录在: \thrift-master\compiler\cpp 原来是vs2010的功能,用vs2013打开之后会提示升级,因为这只是一个工具,所以不需要升级,直接编译得到需要的exe 编译之后得到一个thrift.exe,这个工具可以把中间代码生成对应的目标代码 生成需要的测试代码 在thrift.exe的目录中新建一个记事本,粘贴如下内容保存,之后把文件名改成student.thrift: <span style="font-size

bash中的文件测试

如果下面的条件成立返回真...-e 文件存在 -a 文件存在 这个和-e的作用一样. 它是不赞成使用的,所以它的用处不大. -f 文件是一个普通文件(不是一个目录或是一个设备文件) -s 文件大小不为零 -d 文件是一个目录 -b 文件是一个块设备(软盘, 光驱, 等等.) -c 文件是一个字符设备(键盘, 调制解调器, 声卡, 等等.) -p 文件是一个管道 -h 文件是一个符号链接 -L 文件是一个符号链接 -S 文件是一个socket -t 文件(描述符)与一个终端设备相关 这个测试选项可

Jmeter负载测试例子

通过浏览器操作网站在jmeter录屏控制器显示录屏例子,并且通过这例子模拟多用户(线程)来负载测试. 工具/原料 Jmeter 浏览器 1.先在测试计划创建线程组和录制Case 1 1.1 选择测试计划 2 1.2创建线程组 3 1.3创建录制控制器 4 1.4结果如下: END 2.先在jmeter设置代理服务器 1 2.1 在工作台建立代理服务器 2 2.2结果如下: 3 (注意默认端口是8080,当然可以改) 4 目标控制器是选择刚才的录制控制器,分组选择(每个组放入一个新的控制器) 5

FIFO管道

1.mkfifo -m 777 fifo1 :  创建一个有名管道,权限是777 2.可以实现无关进程间的通信,克服了匿名管道的缺陷 3.,管道文件最前面是 p 4.管道文件传输信息类似于文件,但又区别于普通文件,管道文件在数据读出后,管道中就会同时清除数据 5.函数创建管道: #include<stdio.h> #include<sys/stat.h> #include<sys/types.h> #include<stdlib.h> int main(in

bash之运算、测试、if语句及for循环语句

一.逻辑运算 布尔运算:真.假 与运算: 真 && 真 = 真 真 && 假 = 假 假 && 真 = 假 假 && 假 = 假 或运算: 真 || 真 = 真 真 || 假 = 真 假 || 真 = 真 假 || 假 = 假 非运算: 非真 = 假 非假 = 真 二.状态返回值 echo $? 成功:则返回0 失败:则返回1-255,失败不等于假 自定义:exit [n] 三.算数运算 1.定义整形变量 let VAR_NAME=INTEG