面试的间隙回头复习了一下node,感觉node就像一个胶带,把V8和libuv粘在了一起。 V8毫无疑问,负责解析执行JavaScript,相当于语言层面的桥梁;而libuv则是负责操作系统底层功能的封装,例如基于IOCP的event loop、file system ...
在Timer模块中有提到,libuv控制着延迟事件的触发,那么必须想办法精确控制时间。 如果是JS,获取当前时间可以直接通过Date.now 得到一个时间戳,然后将两段时间戳相减得到时间差。一般情况下当然没有问题,但是这个方法并不保险,因为本地计算机时间可以修改。 libuv显然不会用这么愚蠢的办法来计算时间,C 内部有更为精妙的方法来处理这个事。 首先在上一节中,一个简单的事件轮询代码如下: ...
2018-12-07 03:04 0 1089 推荐指数:
面试的间隙回头复习了一下node,感觉node就像一个胶带,把V8和libuv粘在了一起。 V8毫无疑问,负责解析执行JavaScript,相当于语言层面的桥梁;而libuv则是负责操作系统底层功能的封装,例如基于IOCP的event loop、file system ...
好久没写东西了,过了一段咸鱼生活,无意中想起了脉脉上面一句话: 始终保持自己的竞争力。所以,继续开写! 一般的JavaScript源码看的已经没啥意思了,我也不会写什么xx入门新手教程,最终决定还是啃原来的硬骨头,从外层libuv => node => v8一步步实现原有 ...
好像博客有观众,那每一篇都画个图吧! 本节简图如下。 上一篇其实啥也没讲,不过node本身就是这么复杂,走流程就要走全套。就像曾经看webpack源码,读了300行代码最后就为了取package.json里面的main属性,导致我直接弃坑了,垃圾源码看完对脑子没一点 ...
libuv我在今年四月份的时候开始接触,一开始也遇到了很多坑,但后来理解并遵守了它的设计思想,一切就变得很方便。这几天开始着手精读它的源码,本着记录自己的学习痕迹,也希望能增加别人搜索相关问题结果数的目的,因此就有了这些东西,这个系列至少会有四篇,后续再说吧。 那么它是什么,一个高效轻量的跨平台 ...
Linux或者VxWorks下面精确获取函数运行的时间: uint64 start_time; /* 起始时间 */ uint64 end_time; /* 结束时间 */ struct timespec ltv;(void)clock_gettime ...
这一篇来分析libuv的四个特殊的持续请求(uv_handle_t族),uv_idle_t,uv_check_t,uv_prepare_t,uv_async_t。它们直接以强类型保存在uv_loop_t中,而不像其它的持续请求保存在handle_queue中,也是最简单的持续请求。 在实现中 ...
先介绍一个可能比较常用的方法,获取当前时间 var datetime: string; begin datetime:= FormatDateTime('yyyy-mm-dd hh:mm:ss', Now); ShowMessage(datetime ...
戳: 在不同的开发语言中,获取到的时间戳的长度是不同的,例如C++中的时间戳是精确到秒的,但是Java中的时间 ...