![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
libuv
文章平均质量分 77
WesleyWang97
这个作者很懒,什么都没留下…
展开
-
libuv源码剖析(一): 高效队列 Queue
Introductionlibuv中的高效队列是用c语言, 只使用宏定义封装而成, 据说linux内核都是这个风格的, 因为我没有读过linux内核源码, 所以一开始理解这一段代码还是有些困难的.libuv中使用的是双向循环队列, 实际上每个节点是两个 void* 指针, 分别保存 next, prev 指针.实现原理libuv 的 queue 实现了 QUEUE_NEXT, ...原创 2018-08-26 22:23:17 · 3553 阅读 · 0 评论 -
libuv源码剖析(二): 句柄handle
Introductionhandle 句柄就类似于事件, 需要被注册到 loop 中. 在 libuv 中, 事件的基本类型都已经给出了定义, 共同”继承”了 uv_handle_s, 这里所说的继承, 是c语言通过 -_ 来曲线救国实现的抽象基类抽象基类是 uv_handle_t:/* The abstract base class of all handles. */s...原创 2018-08-26 23:19:30 · 1180 阅读 · 0 评论 -
libuv学习(五) : Processes
Introduction对于基于事件(event-based)的程序来说, 有个限制是没办法很好地利用多核,提高CPU使用率. 即使能够使用多线程编程来分发 handle, 但是每个 loop 还是只有一个线程.这时候, 使用多进程就能够分担 loop 的压力. 并且通过多进程 + 通信的方法, 会比 多线程 + 共享内存的方法更加安全, 易于开发.创建进程创建子进程创...原创 2018-08-22 21:15:35 · 1785 阅读 · 2 评论 -
libuv源码剖析(三): 事件循环loop
Introductionlibuv中的 loop 是 libuv 最为核心的事件队列. 在熟悉了 libuv 的高效事件队列 queue, 和基本数据结构 handle 之后, 就需要来了解一下 loop 的实现. 下面通过一个uvbook中具体的实例来讲解.uv_loop_t 数据结构我们首先看一下 uv_loop_t 的数据结构:struct uv_loop_s { ...原创 2018-08-28 17:05:16 · 4760 阅读 · 1 评论 -
libuv学习(四) : Threads
Introduction当下主要有两种流行的线程库: Windows Threads 和 Posix 实现. libuv的thread API类似于 pthread 库.libuv 允许你通过开启线程并且在结束时收集结果来模拟异步操作,而实际上是阻塞操作所以 libuv 提供自己实现的 thread 方法,是为了能够让某些在 loop 中的 handle 能够在独立的线程中运行, 也提...原创 2018-08-21 17:17:53 · 935 阅读 · 0 评论 -
libuv源码剖析(四): 高效线程池Threadpool
Introduction在网络编程中, 始终都是基于Reactor模型的变种, 无论怎么演化, 核心组件都包括: Reactor实例(事件注册, 注销, 通知); 多路复用器(由操作系统提供, 比如kqueue, select, epoll); 事件处理器(handler)以及事件源(linux中这就是描述符)这四个组件.一般,会单独启动一个线程运行Reactor实例来实现真正的异步操作。...原创 2018-08-29 14:36:35 · 4097 阅读 · 2 评论