前言

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()相关推荐

  1. 微信小游戏背后的技术优化

    作者:chrongzhang,腾讯 WXG 客户端开发工程师 这是一篇介绍微信小游戏客户端底层,如果进行优化,可以让所有小游戏获得更好性能的文章.不是你想像的怎么优化某个小游戏的文章.来都来了,就了解 ...

  2. 《HelloGitHub》第 60 期,你喜欢玩游戏吗?

    兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目.内容包括:有趣.入门级的开源项目.开源书籍.实战项目.企业级项目等,让你用很短时间感受 ...

  3. 类脑运算--脉冲神经网络(Spiking Neural Network)发展现状

    类脑运算–脉冲神经网络(Spiking Neural Network)发展现状 前一段时间忙于博士论文的攥写和答辩, 抱歉拖更 继上一章: 类脑运算–脉冲神经网络(Spiking Neural Net ...

  4. 关于微信网页游戏背后的技术优化

    微信网页游戏主要分为渲染和逻辑两部分.渲染优化能让渲染相关的指令(WebGL/GFX)得到更高效的执行,逻辑优化是让除渲染之外的代码也能更高效的执行,本篇主要讲述逻辑相关的优化. 基础功能优化 微信网 ...

  5. mediasoup详解

    Mediasoup 是完全兼容webrtc的高性能sfu服务器,采用单进程模式,多少核心数开启多少个进程.另外,mediasoup使用 Nodejs 做 信令处理及业务的管理 工作,流媒体转发工作由M ...

  6. 跨平台异步IO库 libuv 源代码接口详解

    Table of Contents 简介 谁这本书是为 背景 代码 libuv的基础知识 事件循环 helloworld 默认循环 错误处理 把手和要求 空转 存储方面 文件系统 读/写文件 文件系统 ...

  7. libuv:多平台支持库-异步I / O

    http://libuv.org/ 目录 概述¶ 功能 文档 下载 安装 设计概述¶ 把手和请求¶ I / O循环 文件I / 概述¶ libuv是一个多平台支持库,主要关注异步I / O.它主要通过 ...

  8. (4)FPGA面试题同步逻辑和异步逻辑

    1.1 FPGA面试题同步逻辑和异步逻辑 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题同步逻辑和异步逻辑: 5)结束语. 1.1.2 本节引言 &quo ...

  9. Libuv源码分析 —— 8. 线程池

    网络I/O 在 上一节 的学习中,我们已经搞明白了网络I/O的基本过程,并通过了解进程/线程间通信来熟悉这个流程.下面,让咱们学习线程池中的线程如何工作.并和主进程进行通信的吧! 线程池 Libuv ...

最新文章

  1. Apache启动时报Could not reliably determine the server's fully qualified domain name
  2. phpcms v9二次开发之模型类的应用(1)
  3. P1447-[NOI2010]能量采集【GCD,数论,容斥】
  4. 公司服务器文件保存出错,R服务器错误保存文件没有这样的文件或目录(Ubuntu)...
  5. asp.net listview 字段太多 滚动条_人生有太多身不由己,回头看看最对不起的就是自己...
  6. 3.9 YOLO 算法
  7. 3dmax高版本转低版本插件_Fundebug前端JavaScript插件更新至1.8.0,兼容低版本的Android浏览器...
  8. c语言中精度站的字节,C语言学习--一些细节问题
  9. 伯克利人工智能导论课开放:视频、PPT和练习都在这 | 资源
  10. linux hasp的加密狗驱动程序,hasp加密狗驱动下载-hasp加密狗驱动(圣天诺加密狗驱动) win7/8/10 官方通用版 - 河东下载站...
  11. 2022华为杯研究生数学建模竞赛F题思路解析
  12. java表白程序_Java实现表白小程序
  13. android逆向 arm,[原创]Android下ARM静态反编译逆向.(小试多玩YY协议)
  14. 微信小程序 简单动画入门
  15. 斑马打印机ZPL语言和EPL语言的区别是什么
  16. 0基础不用怕,从0到1轻松教你入门Python
  17. ST-LINK Utility + ST LINK+ STM32G474 erase chip fails
  18. 电脑上怎么进行pdf合并免费
  19. 读 孙卫琴《Tomcat与Javaweb开发技术详解》
  20. Android 12上焕然一新的小组件

热门文章

  1. pdf电子发票打印方法
  2. 港科喜讯| 范智勇教授获2022年科学探索奖
  3. 青春是黄鹤·《致我们终将逝去的青春》
  4. android常见问题
  5. 电脑Win7系统刷新dns缓存,输入“ipconfig /flushdns”命令后,显示无法刷新DNS解析缓存:执行期间,函数出了问题
  6. ACM模式各种输入整理(C++)
  7. 教你WordPress博客网站搬家和换域名、批量换图片地址方法
  8. 个人理财第四课-哪里购买基金好?
  9. k8s集群flannel问题之telnet node节点开放端口Connect timeout情况
  10. 2023年计算机考研经验贴