linux下实现并发逻辑
################shell 模拟实现并发跑数#################
有时候我们知道一些程序是可以同时跑的,互不影响,为了提高效率不得不使用并发跑脚本
#1、思路一
我们都知道在linux中把程序丢后台跑脚本,我们可以同时跑很多个,这就是实现并发的思路,但是呢?
如果我们一次性跑很多的后台程序,如果服务器没能扛住。。。。这就尴尬了,如果手工控制。。这就有点low了
#2、思路二
基于上面我们弄个改进版,我们写个循环,分批跑,每批保证每次只能跑10个,这样就解决上面的问题啦
但是,分批跑,每一批都要等上一批跑完了,下一批才能继续,如果每个批次中都有那么一个跑的很慢,这样就效率低啦
#3、思路三
就像现在的服务一样,比如银行,我们都知道去银行办理手续都是先那个号,假设银行有10个窗口,我们都知道有些人办理的
业务很简单,分分钟就完事了,但是有些人就很慢了,所以每个人手上都要有个编号,按照编号进行处理,这样就可以保证每个
窗口都一值保持给客户办理业务啦。这就是处理linux并发的逻辑了
实现:
就是采用有名管道mkfifo命令和exec命令实现,管道有阻塞的特点,要等待传送值才继续运行,如有不懂的小伙伴,可以去度娘
#!/bin/bash
############################################
## Author:lugh1
## Blog:
## Time:-- ::
## Version:V 1.0
## Description:并发跑数到gp对应的exp表
############################################ #检查参数。。。。 PWD=`cd $(dirname "$0");pwd` #获取脚本的目录 #创建临时管道文件
mkfifo $PWD/fifo_file #以读写方式打开fifo_file管道文件,文件描述符为4(赋予其有管道的特性),也可以取3-9任意描述符
exec <>$PWD/fifo_file #删除临时管道文件,也可不删除
rm -f $PWD/fifo_file #设置并发数,也就是举例中银行的窗口数
for ((i=;i<;i++))
do
echo "" > &
done #循环所有要执行任务,这里根据自己的业务需求修改循环
while true
do
read -u3 #从管道中读取行,每次一行,所有行读取完毕后执行挂起,直到管道有空闲的行,
#也就是有一个人去一个窗口办理业务了,所以就少了一个可用的窗口 {
sh shell.sh #这里放置自己要跑的逻辑
echo "" >&
}& #放入后台执行,这里表示一个人在一个窗口开始办理业务,占据了一个位置,所以这个人占据位置和办理业务是
#绑定在一起的,所以需要{}&,表示当这个人办理完了,就离开了,然后就释放了那个座位,下一个持有编号对的人
#又可以在该窗口办理业务了
done
wait #等待所有后台进程执行完成
exec >&- #删除文件描述符
exec <&- #删除文件描述符
linux下实现并发逻辑的更多相关文章
- Linux下高并发socket最大连接数所受的各种限制(详解)
1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每 ...
- Linux下高并发socket链接数测试
一.如何增大service进程的max open files ulimit -n 只能改小max open files,不能改大.需要按照以下步骤: 修改/etc/security/limits.co ...
- Linux下高并发网络编程
Linux下高并发网络编程 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时, 最高的并发数量都要受到系统对用户单一进程同时可打 ...
- linux下高并发网络应用注意事项
本文转自:http://www.blogjava.net/bacoo/archive/2012/06/11/380500.html linux下高并发网络应用注意事项 vi /etc/sysctl.c ...
- [转载] Linux下高并发socket最大连接数所受的各种限制
原文: http://mp.weixin.qq.com/s?__biz=MzAwNjMxNjQzNA==&mid=207772333&idx=1&sn=cfc8aadb422f ...
- Linux下高并发socket最大连接数所受的各种限制
http://blog.csdn.net/guowake/article/details/6615728 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行 ...
- Linux下高并发socket最大连接数
http://soft.chinabyte.com/os/285/12349285.shtml (转载时原文内容做个修改) 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是 ...
- Linux下高并发socket最大连接数各种限制的调优
1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每 ...
- Linux下高并发socket最大连接数所受的各种限制(转)
1.修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个 ...
随机推荐
- Char.Js 学习使用
<script src="../js/Chart.js"></script> <div " style="float:left;& ...
- NOSQL—MongoDB之外的新选择
MongoDB之外的新选择 MongoDB拥有灵活的文档型数据结构和方便的操作语法,在新兴的互联网应用中得到了广泛的部署,但对于其底层的存储引擎一直未对外开放,虽说开源却有失完整.Mongo版本3中开 ...
- bzoj3316 JC loves Mkk题解
3316: JC loves Mkk Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 979 Solved: 316[Submit][Status][Di ...
- 【转载】DOMContentLoaded与load的区别
DOMContentLoaded与load的区别 (1)在chrome浏览器的开发过程中,我们会看到network面板中有这两个数值,分别对应网 络请求上的标志线,这两个时间数值分别代表什么? ( ...
- 微信小程序开发--API界面交互
一.wx:showActionSheet(上拉菜单) 属性 类型 默认值 必填 说明 itemList Array.<string> 是 按钮的文字数组,数组长度最大为 6 itemC ...
- C# .net Ueditor实现图片上传到阿里云OSS 对象存储
在学习的时候,项目中需要实现在Ueditor编辑器中将图片上传到云储存中,老师演示的是上传到又拍云存储,既然看了一遍,直接照搬不算本事,咱们可以依葫芦画瓢自己来动手玩玩其它的云存储服务. 现在云计算产 ...
- 掌握简单的Makefile文件编程
Makefile描述整个程序的编译.链接规则 其中还包括了工程中用到的那些源文件及需要产生的目标文件 1)Makefile编程规则 目标(唯一):依赖(可多个) 命令... 伪目标 .PHONY:cl ...
- 深入学习SpringMVC
1.什么是SpringMVC? SpringMVC是Spring框架内置的MVC的实现.SpringMVC就是一个Spring内置的MVC框架.MVC框架,它解决WEB开发中常见的问题(参数接收.文件 ...
- 你真的了解 Cookie 和 Session 吗
我在做面试官的时候,曾经问过很多朋友这个问题: Cookie 和 Session 有什么区别呢?大部分的面试者应该都可以说上一两句,比如:什么是 Cookie?什么是 Session?两者的区别等. ...
- PHP--数据库访问(增、删、改、查)
练习通过数据库查询一个表,操作这个表的增.删.改.查的功能! 一.主页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition ...