libuv异步任务逻辑和uv_queue_work()
前言
libuv没有asio的post函数,但我们可以uv_async_init+uv_async_send模拟,uv_async_send传参可以借助 async.data。由于某些任务很耗时(如文件读写,或者连接mysql),如果直接通过上面这种方式添加到eventloop中,会影响eventloop的吞吐量,所以libuv提供了uv_queue_work来解决这种情况。
libuv的异步任务逻辑
这部分其实就是uv_loop_run的延伸,就不逐代码分析了直接上流程图。
uv_queue_work(loop,callback, done)
libuv提供了线程池。为了解决某些异步任务耗时过长会影响eventloop的吞吐率问题,我们可以将这种任务分成两部分:callback为耗时逻辑 ,done 为执行完callback的后续逻辑。callback交给线程池完成,完成后立刻添加done到eventloop中,然后唤醒eventloop,调用uv_work_done函数,调用done函数。
uv_queue_work 的work req添加和回调触发的详细流程图
在这我更能体会到req和handle的区别,handle初始化后就一直存在在loop中,我们需要调用close将其从loop中移除,但req则不需要,在添加到线程池工作队列中后,在执行一次后,就会将其从工作队列中移除,done部分也是如此(从loop的wq中移除)。
libuv异步任务逻辑和uv_queue_work()相关推荐
- 微信小游戏背后的技术优化
作者:chrongzhang,腾讯 WXG 客户端开发工程师 这是一篇介绍微信小游戏客户端底层,如果进行优化,可以让所有小游戏获得更好性能的文章.不是你想像的怎么优化某个小游戏的文章.来都来了,就了解 ...
- 《HelloGitHub》第 60 期,你喜欢玩游戏吗?
兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目.内容包括:有趣.入门级的开源项目.开源书籍.实战项目.企业级项目等,让你用很短时间感受 ...
- 类脑运算--脉冲神经网络(Spiking Neural Network)发展现状
类脑运算–脉冲神经网络(Spiking Neural Network)发展现状 前一段时间忙于博士论文的攥写和答辩, 抱歉拖更 继上一章: 类脑运算–脉冲神经网络(Spiking Neural Net ...
- 关于微信网页游戏背后的技术优化
微信网页游戏主要分为渲染和逻辑两部分.渲染优化能让渲染相关的指令(WebGL/GFX)得到更高效的执行,逻辑优化是让除渲染之外的代码也能更高效的执行,本篇主要讲述逻辑相关的优化. 基础功能优化 微信网 ...
- mediasoup详解
Mediasoup 是完全兼容webrtc的高性能sfu服务器,采用单进程模式,多少核心数开启多少个进程.另外,mediasoup使用 Nodejs 做 信令处理及业务的管理 工作,流媒体转发工作由M ...
- 跨平台异步IO库 libuv 源代码接口详解
Table of Contents 简介 谁这本书是为 背景 代码 libuv的基础知识 事件循环 helloworld 默认循环 错误处理 把手和要求 空转 存储方面 文件系统 读/写文件 文件系统 ...
- libuv:多平台支持库-异步I / O
http://libuv.org/ 目录 概述¶ 功能 文档 下载 安装 设计概述¶ 把手和请求¶ I / O循环 文件I / 概述¶ libuv是一个多平台支持库,主要关注异步I / O.它主要通过 ...
- (4)FPGA面试题同步逻辑和异步逻辑
1.1 FPGA面试题同步逻辑和异步逻辑 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题同步逻辑和异步逻辑: 5)结束语. 1.1.2 本节引言 &quo ...
- Libuv源码分析 —— 8. 线程池
网络I/O 在 上一节 的学习中,我们已经搞明白了网络I/O的基本过程,并通过了解进程/线程间通信来熟悉这个流程.下面,让咱们学习线程池中的线程如何工作.并和主进程进行通信的吧! 线程池 Libuv ...
最新文章
- Apache启动时报Could not reliably determine the server's fully qualified domain name
- phpcms v9二次开发之模型类的应用(1)
- P1447-[NOI2010]能量采集【GCD,数论,容斥】
- 公司服务器文件保存出错,R服务器错误保存文件没有这样的文件或目录(Ubuntu)...
- asp.net listview 字段太多 滚动条_人生有太多身不由己,回头看看最对不起的就是自己...
- 3.9 YOLO 算法
- 3dmax高版本转低版本插件_Fundebug前端JavaScript插件更新至1.8.0,兼容低版本的Android浏览器...
- c语言中精度站的字节,C语言学习--一些细节问题
- 伯克利人工智能导论课开放:视频、PPT和练习都在这 | 资源
- linux hasp的加密狗驱动程序,hasp加密狗驱动下载-hasp加密狗驱动(圣天诺加密狗驱动) win7/8/10 官方通用版 - 河东下载站...
- 2022华为杯研究生数学建模竞赛F题思路解析
- java表白程序_Java实现表白小程序
- android逆向 arm,[原创]Android下ARM静态反编译逆向.(小试多玩YY协议)
- 微信小程序 简单动画入门
- 斑马打印机ZPL语言和EPL语言的区别是什么
- 0基础不用怕,从0到1轻松教你入门Python
- ST-LINK Utility + ST LINK+ STM32G474 erase chip fails
- 电脑上怎么进行pdf合并免费
- 读 孙卫琴《Tomcat与Javaweb开发技术详解》
- Android 12上焕然一新的小组件
热门文章
- pdf电子发票打印方法
- 港科喜讯| 范智勇教授获2022年科学探索奖
- 青春是黄鹤·《致我们终将逝去的青春》
- android常见问题
- 电脑Win7系统刷新dns缓存,输入“ipconfig /flushdns”命令后,显示无法刷新DNS解析缓存:执行期间,函数出了问题
- ACM模式各种输入整理(C++)
- 教你WordPress博客网站搬家和换域名、批量换图片地址方法
- 个人理财第四课-哪里购买基金好?
- k8s集群flannel问题之telnet node节点开放端口Connect timeout情况
- 2023年计算机考研经验贴