问题标签 [libuv]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
8839 浏览

c++ - 从 V8 中的 C++ 回调调用 Javascript 函数

我试图在调用 c++ 回调时调用已注册的 JS 函数,但我得到了一个段错误,因为我认为这是一个范围问题。

当事件发生时,将调用以下方法。我假设这可能发生在 V8 正在执行 JS 的另一个线程上。

这会导致分段错误: 11. 请注意,如果我使用 addEventListener() 中对 Persistent 的引用直接调用回调函数,它会正确执行该函数。

我假设我需要一个储物柜或隔离?看起来 libuv 的 uv_queue_work() 也可以解决这个问题,但是由于我没有启动线程,所以我看不出你会如何使用它。

0 投票
1 回答
880 浏览

google-chrome-extension - 使用 libuv 监视文件更改

我想为开发人员工具构建一个 Chrome 扩展,以监视给定文件夹的更改并刷新/更新浏览器中的 CSS/JS/图像文件。

已经有类似的方法:

http://tin.cr

Tin.cr 使用的 NPAPI 未经过沙盒处理并且存在一些安全问题,因此我无法在一些公司政策有严格规定的开发环境中使用它(特别是在金融行业)。

另一种方法是使用 NaCl(Chrome 的 Native Client,沙盒)。

我是一名前端开发人员,对 C 知之甚少,所以我需要一些帮助。

如何查看/监控 libuv 中的文件更改?如果有人可以提供代码片段,我将不胜感激。

根据我从文档中了解到的情况,libuv 将允许扩展跨平台工作,我错了吗?

谢谢

0 投票
1 回答
6167 浏览

c++ - libuv线程安全吗?

我创建了一个专用于 libuv 运行循环的新线程。线程函数看起来像这样:

ref 计数器增量使线程保持活动状态并处于处理 libuv 事件的状态。我希望能够通过uv_unref在主线程上执行来导致运行循环结束,从而导致线程退出。

但是,在检查uv_ref源代码时,我没有看到任何保证在并发访问期间对引用计数器变量的访问将同步。此外,在运行循环期间,我没有看到任何放弃对操作系统的控制的 yield 调用,这意味着程序将无法与其他进程很好地协作。

这让我相信我没有以正确的方式使用 libuv。如果有人可以解释我做错了什么,那就太好了!

0 投票
1 回答
423 浏览

c++ - Node.js 插件定时器上下文

libuv 计时器方法在此处记录,并为 Node.js 插件提供了一种定期接收回调以执行任意处理的方法。

这里的回调是超时方法,带有原型:

如何向计时器回调过程提供上下文,最好以void * 的形式提供?

0 投票
0 回答
398 浏览

node.js - 为什么 node.js 中的 ImageMagick 会崩溃?

我正在使用用 ImageMagick 编译的 node.js、node-vips 和 libvips 来转换和调整图像大小。当我尝试调整多个图像的大小时,我遇到了分段错误和失败的断言。

我经历了很多不同的崩溃,我不知道从哪里开始。我从 libvips 7.26.8 开始,我也尝试过 7.30.7。这是从源代码编译的节点 v0.8.17,在一个相当标准、干净的 ubuntu 盒子上。

我经常遇到前两个错误之一——即没有堆栈跟踪。这些都是在尝试调整 6 个左右的图像大小时发生的——有时它们都成功而没有错误,但通常在调整前一两个图像大小后会出现故障。

我到底该如何调试呢?

在 node-vips 插件的单元测试中,有一条评论如下:

如果使用 imagemagick 支持编译 vips,此测试将崩溃,因为从 libeio 调用时 imagemagick 崩溃

为什么是这样?这仍然是真的吗?我认为 ImageMagick 是完全线程安全的,但它如何使它从 libeio/libuv 调用不安全?

0 投票
2 回答
878 浏览

c++ - libuv 是否会导致 uv_listen() 中的内存泄漏?

我测试了我使用 libuv 的小程序。

程序的调试输出显示内存泄漏。

(健康)状况

libuv 版本

  • 操作系统:Windows 7.0
  • 编译器:vs2010

我的测试代码

结果

内部泄漏位置

调用栈

代码

0 投票
2 回答
3411 浏览

c - 使用 libuv 捕获子进程的标准输出

我正在使用 libuv。我已经阅读了http://nikhilm.github.com/uvbook/processes.html并且仍然无法弄清楚如何捕获子进程的标准输出,以便它在父进程中可用(但不能代替父进程的标准输入) )。

我的代码目前是:

假人.c:

我有一种挥之不去的感觉,我还不太明白 libuv 管道的意义所在。

0 投票
1 回答
127 浏览

c++ - GCC - 类型声明的确切位置

我有一个依赖于libuv库(C 代码)的 C++ 代码。由于段错误,它崩溃了。我缩小了问题范围:libuv使用struct statfrom <sys/stat.h>. 如果我在代码中打印此结构的大小:

它显示 88。如果我在 libuv 库中打印相同的内容,它显示 96。这是段错误的原因。我有点卡在这里。如何找到类型声明的确切位置?还有其他方法可以解决这个问题吗?

0 投票
1 回答
1489 浏览

libuv - 正确启动并运行 libuv,以便可以使用它编译程序

我正在尝试在一个项目中使用我们的 libuv。我的第一步只是在计算机上安装 libuv 并准备好使用。我使用的是 Mac OS X 版本 10.6.8。我下载了 zip 文件并将其解压缩。他们网站上的说明只是说使用 make 命令来构建库。当我这样做时,它会创建 libuv.a 文件。我在代码文件中有#include。事实上,此时我只是试图编译和运行他们介绍文件中提供的示例程序。http://nikhilm.github.com/uvbook/basics.html。在朋友的帮助下,我终于发现如果我运行 make run-test 它将创建 libuv.dylib,然后只要我设置 LD_LIBRARY_PATH=../deps/libuv-master ./testEventLoop,程序就会编译并运行。

我已经制作了 3.81 版。我的项目位于一个名为 echo 的文件夹中,该文件夹有两个目录 deps 和 src。提取的 libuv 文件,包括它们的所有子文件都在 deps 中。test.c 文件和我的 make 文件位于 src 文件夹中。

这是我第一次使用第三方库,似乎我在碰壁。我已经查看了我在网上可以找到的关于使用第三方库和特别是 libuv 的所有内容。包括但不限于通过 GNU make 说明http://www.gnu.org/software/make/manual/make.html#Overview来尝试理解 libuv 的 makefile 以及来自其他几个项目的 make 文件使用 libuv 的网站。

这些项目是如此之大,以至于我很难挖掘出这件小事。必须有其他人需要第三方图书馆的帮助。我觉得我已经很接近了,但只是没有得到什么,就像我错过了一些让它以应有的方式工作的小块。

如果我遗漏了我应该包含的任何信息,请告诉我,我将编辑问题。

0 投票
2 回答
7423 浏览

javascript - 关于node.js内部异步I/O机制的困惑

  1. 我了解到 node.js 在内部使用 libeio 在 *nix 平台上使用线程池执行异步文件I/O,对吗?
  2. 异步网络I/O 呢?它是由libev完成的吗?还有线程池吗?
  3. 如果里面有线程池,怎么会比传统的请求一个线程的模型更高效呢?每个 I/O 请求一个线程吗?
  4. windows上的机制是什么?我知道它是由 IOCP 完成的,并且有一个内核级别的线程池,对吧?
  5. 为什么linux还没有像windows IOCP这样原生的完全AIO机制呢?将来会有吗?

根据changchang的回答更新:

  1. 我快速查看了@changchang 给出的源代码,发现默认线程池大小可以通过UV_THREADPOOL_SIZE重置,我想知道在哪种情况下会使用它?
  2. 我也发现getaddrinfo用了这个线程池,除了fs还有吗?如果所有同步作业都在这个线程池中完成,那么默认大小“4”是否足够?
  3. 据我现在的理解,node.js 进程中将有 6 个基本线程:1 个 V8 线程(事件循环,用户 javascript 代码运行的地方)、1 个 libuv 事件循环和线程池中的 4 个,对吗?
  4. 我怎样才能在我的外壳(Ubuntu)中看到这些线程?我使用ps -eLf | grep 节点 | grep -v grep只看到两个:

    根 16148 7492 16148 0 2 20:43 pts/26 00:00:00 ./bin/node /home/aaron/workspace/test.js
    根 16148 7492 16149 0 2 20:43 pts/26 00:00:00 。 /bin/node /home/aaron/workspace/test.js