Articles of libuv

如何用ValgrindtestingNode C ++附件?

在运行valgrind node ,Node似乎放弃了一个与系统调用有关的错误。 我在macOS Sierra,Node v8.2.1上。 $ valgrind `which node` test-pass.js ==17115== Memcheck, a memory error detector ==17115== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==17115== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info ==17115== Command: /Users/junon/n/bin/node test-pass.js ==17115== ==17115== Syscall param msg->desc.port.name points to uninitialised byte(s) ==17115== at […]

在节点js中,什么是libuv,并使用所有核心?

据我所知,所有IO请求和其他asynchronous任务都是由libuv中的nodejs完成的。 我想知道:使用线程是libuv吗? 如果是,是否使用所有可用的核心?

为什么Node.js libuv线程池执行不兼容?

AFAIK Node.jsasynchronous任务被调度到libuv下,libuv有一个线程池,默认情况下有4个线程在池中。 我testing下面的代码: setImmediate(() => { sleep(1000 * 3); console.log('a'); }); setImmediate(() => { sleep(1000 * 3); console.log('b'); }); setImmediate(() => { sleep(1000 * 3); console.log('c'); }); function sleep(time) { let start = new Date().getTime(); while (new Date().getTime() – start < time) { } } 我认为发送到libuv的3个任务将同时执行,并且输出a / b / c应该几乎同时打印,但事实上,每3秒输出一次。 哪里错了? 谢谢。

为什么节点产生了几个线程?

我列出了我的节点服务器的线程,以下是标准输出的响应: $ ps -e -T | grep 14209 14209 14209 ? 00:10:08 node 14209 14415 ? 00:00:00 V8 WorkerThread 14209 14416 ? 00:00:00 V8 WorkerThread 14209 14417 ? 00:00:00 V8 WorkerThread 14209 14418 ? 00:00:00 V8 WorkerThread 14209 14419 ? 00:00:00 node 14209 15894 ? 00:00:00 node 14209 15895 ? 00:00:00 node 14209 15896 ? […]

Node.js插件计时器上下文

libuv定时器方法在这里被logging,并提供了一个Node.js插件接收定期callback以执行任意处理的方法。 uv_timer_t timer; uv_timer_init( uv_default_loop(), &timer); uv_timer_start( &timer, callback, 0, interval ); 这里的callback是超时的方法,原型如下: void callback( uv_timer_t *handle, int status ); 如何给定时器callback过程提供一个上下文,最好是void *forms?

触摸文件,然后在Node中写入

在写入之前如何触摸文件? 尝试 fs = require 'fs' os = require 'os' path = require 'path' json_filepath = path.join os.tempdir(), 'cache', 'foo.json' module.exports = (cb) -> fs.open json_filepath, 'w', 438, (err) -> # Touch, also tried with node-touch return cb err if err? fs.writeFile json_filepath, {foo: 'bar'}, {}, (err) -> #console.error 'Error writing cache: ', err cb […]

检测当前线程是否是libuv默认事件循环的主线程

我正在为Node.js编写一段C代码,并且想要区分asynchronous调用和同步调用。 换句话说,我想要检测我的代码是否在主事件循环中调用的V8事件分派线程上运行,或者是否从某个单独的工作线程调用它。 在前一种情况下,我可以立即调用JavaScript,而在后者中,我必须使用更复杂的asynchronouscallback。 libuv线程API提供了uv_thread_self来标识当前线程,而uv_thread_equal提供了相等的线程比较。 所以我需要find主事件循环的uv_thread_t 。

libuv:什么是uv_setup_args函数?

在阅读node.js的源代码时,我遇到了这个问题: // Hack around with the argv pointer. Used for process.title = "blah". argv = uv_setup_args(argc, argv); 我还没有find有关libuv文档function的任何文档,就好像它甚至不存在。 我还检查了是否在node.js代码中的其他地方定义了它; 它不是。 任何人都可以启发我什么呢? 另外,如果存在,你能指出我的文档吗?

JavaScript的内部:在什么时间间隔的事件循环运行?

这是一个关于JavaScript内部的问题。 比方说,我有10个asynchronous任务,都需要X秒运行。 在等待回应时,脚本闲置。 在后台,JavaScript引擎询问“任务队列中是否有任何内容”。 据我了解这是一个循环。 因此,事件循环。 我知道在Node中这是用Libuv实现的。 我已经阅读了这篇文章,它有点解释: https : //nikhilm.github.io/uvbook/basics.html 为了平衡应用程序的性能,JavaScript引擎是否对此事件循环运行的频率设置了限制? 它是否以设定的时间间隔运行? 如果我什么都没有,请纠正我。 我纯粹感兴趣的事件循环运行的时间间隔。

Node.js:为什么闲置和准备阶段只在内部使用?

node.js的文档描述了其基础事件循环的所谓阶段 。 它明确指出, 空闲和准备阶段只在内部使用 。 对于node.js的事件循环是libuv的循环 ,不用说这些阶段可能映射到libuv的空闲和准备句柄上。 他们将有助于在组织软件任务时获得更大的粒度。 特别是,它们是在执行I / Ocallback和投票阶段之间进行安排的唯一方法。 无论如何,它们不会从底层环境中导出 。 这些阶段被禁止的原因是什么,实际上给用户一个比libuv提供的事件循环显然最差的事件循环? 有没有其他的方式来按上述方式安排任务? 旁注:这只是好奇心。 我曾经与libuv和nodejs一起工作,我注意到了,所以我想知道是否有技术上的原因,或者…这是如何devise的,没有特别的理由。