pthread异步_异步管道的实现
“最近在做F-Stack相关内容,F-Stack协议栈单线程独占异步轮询网卡,所以要求异步。但是又有多线程需要利用F-Stack进行发包,并且发包ff_sendto需要由F-Stack线程调用,就这样引入了此篇命题。”
整体结构
Talk is cheap,show me the code首先我们需要管道文件描述符。
/* 管道两头的FD */static int pipe_fd[2] = {-1};/* 管道两头的打开方式 */static FILE *pipe_in_fp = NULL;static FILE *pipe_out_fp = NULL;
关于异步多路复用,我们采用epoll(关于epoll也进行过讲解:浅谈epoll)。
/* epoll fd */static int epoll_fd = -1;/* epoll events */static struct epoll_event epoll_evs[MAX_EVENTS];
使用连个线程向管道发送数据,一个线程用于管道数据的接收。
/* 管道两头的线程 */static pthread_t tpipe_in1;static pthread_t tpipe_in2;static pthread_t tpipe_out;
初始化管道相当简单。
/* 初始化管道 */void pipe_initial() { pipe(pipe_fd); /* 打开管道两端 */ pipe_in_fp = fdopen(pipe_fd[1], "w"); pipe_out_fp = fdopen(pipe_fd[0], "r");}
使用epoll对管道出口进行监听。
/* 初始化epoll */void epoll_initial() { epoll_fd = epoll_create(1); struct epoll_event pipe_ev; pipe_ev.data.fd = fileno(pipe_out_fp); pipe_ev.events = EPOLLIN; epoll_ctl(epoll_fd, EPOLL_CTL_ADD, fileno(pipe_out_fp), &pipe_ev);}
接下来,启动线程。
/* 启动任务 */void thread_execute() { pthread_create(&tpipe_in1, NULL, thread_pipe_in, NULL); pthread_create(&tpipe_in2, NULL, thread_pipe_in, NULL); pthread_create(&tpipe_out, NULL, thread_pipe_out, NULL); pthread_setname_np(tpipe_in1, "pipe-in1"); pthread_setname_np(tpipe_in2, "pipe-in2"); pthread_setname_np(tpipe_out, "pipe-out"); }
按照以上循序进行初始化。
/* 主函数 */int main () { pipe_initial();/* 初始化管道 */ epoll_initial();/* 初始化epoll */ thread_execute();/* 开始执行任务 */ main_loop();/*主循环,由主进程执行 */}
--往期回顾--浅谈epollF-Stack实现UDP服务端、客户端吞吐量测试F-Stack DPDK lcore与cpe_set的配置点击“阅读原文”,查看源码。
pthread异步_异步管道的实现相关推荐
- activemq java 异步_异步消息处理机制之activeMQ应用实例
上篇说了KAFKA应用实例,本篇承接上篇,着重描述activeMQ消息机制的应用. KAFKA和MQ同为数据异步处理中间件,本质都是对消息的异步处理,异步通信.削谷填峰,高并发情况下的数据处理机制.他 ...
- python 异步io_python异步IO编程(一)
python异步IO编程(一) 基础概念 异步IO (async IO):一种由多种语言实现的与语言无关的范例(或模型). asyncio:Python 3.4版本引入的标准库,直接内置了对异步IO的 ...
- C# 委托的三种调用示例(同步调用 异步调用 异步回调)
首先,通过代码定义一个委托和下面三个示例将要调用的方法: 复制代码 代码如下: public delegate int AddHandler(int a,int b); public clas ...
- springboot异步和切面_Spring异步编程 | 你的@Async就真的异步吗 ☞ 异步历险奇遇记...
引言有点长 前端的宝宝会用ajax,用异步编程到快乐的不行~ 我们java也有异步,用起来比他们还快乐~ 我们bia~ji~一个注(gǒupí)解(gāoyào),也是快乐风男... 且看下面的栗子: ...
- springboot异步和切面_Spring异步编程 | 你的@Async就真的异步吗?异步历险奇遇记
Spring异步编程 | 你的@Async就真的异步吗?异步历险奇遇记 点击上方"java进阶架构师",选择右上角"置顶公众号" 20大进阶架构专题每日送达 引 ...
- java 什么是异步_java异步是什么意思
本篇文章将对Java异步进行介绍,希望对大家有所帮助. 异步:异步与同步相对,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作. 也就是说无论异步方法执行代码需要多长时间,跟 ...
- 【代码】javascript - (异步/非异步) - 进度条
文章目录 # 异步 # 非异步 # 异步 <!DOCTYPE html> <html lang="en"><head><meta char ...
- 同步阻塞 同步非阻塞 异步阻塞 异步非阻塞
今天老师讲了同步阻塞 同步非阻塞 异步阻塞 异步非阻塞.讲完感觉老师自己说的都是前后矛盾的.去网上找了几篇大佬的博客,看完后才有点点感悟.特地小结记下来,若有错误之处,欢迎大家斧正. 首先先弄清楚同步 ...
- 简单理解什么是同步阻塞/同步非阻塞,异步阻塞/异步非阻塞
简单理解什么是同步阻塞/同步非阻塞,异步阻塞/异步非阻塞 声明:本篇思想非原创,系从老师处听来.因为CSDN发转载需要有原文链接,本篇没有原文链接,所以填的原创. 举个栗子 1.你在家做饭,用普通的汤 ...
最新文章
- 硬盘盘符无法识别或已损坏,别急着格式化
- html文档打开错误,我的html的文档无法打开,打开也是报错
- G6 图可视化引擎——核心概念——节点/边/Combo——内置节点——内置节点总览
- 使用Docker-数据卷命令
- gradient渐变IE兼容处理
- Specified VM install not found: type Standard VM, name jdk1.7
- 工业互联网二级节点建设_建设者还是二传手?
- VB讲课笔记03:对象及其操作
- java 获取路径_java 获取当前类的路径
- Tricks(四十八)—— 注释一段代码
- 深入了解什么是服务网格
- Vmware虚拟机桥接模式设置
- php微信昵称保存,附件十四 存储微信昵称的处理方法
- (FFT)快速傅里叶变换在目标跟踪中的运用
- QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之02EC20模组硬件供电和开关机复位操作
- 龙贝格求积分算法例题_数值分析实习作业之龙贝格求积
- Excel+VBA+之快速上手(2)
- 上传图片方向不对 php,如何解决IOS中html5上传图片方向问题?
- ARM-Linux嵌入式系统启动流程
- 2、开源GPS项目HD-GR GNSS的自叙
热门文章
- 杭电5256 序列变换(LIS)
- nginx redis mysql_Nginx + Lua + Kafka + Redis + Mysql
- cpu使用率_微软:Windows 10的高CPU使用率问题已解
- linqto 多个关键字模糊查询_查询函数Choose、Lookup、Hlookup、Vlookup应用技巧解读
- go kegg_玩转GO和KEGG富集因子图的N种姿势: 3种数据处理(含在线筛选条目),3种排序方式,本地交互图片...
- ctfshow-WEB-web10( with rollup注入绕过)
- SQLi LABS Less-6 报错注入+布尔盲注
- springboot 支付宝电脑支付
- chromedriver 版本
- 从Nest到Nesk -- 模块化Node框架的实践