问题标签 [kqueue]

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 投票
1 回答
398 浏览

epoll - 将 epoll 移植到 libevent

我使用 epoll 开发了一个服务器。它在 Linux 下运行良好。但我想使用 kqueue 为 macosx 提供支持。我听说 libevent 是这些基于事件的库(epoll、kqueue)之上的抽象层。

如何使用 epoll 将此代码移植到 libevent?示例代码:https ://banu.com/blog/2/how-to-use-epoll-a-complete-example-in-c/epoll-example.c是否可能(兼容 %100)?

0 投票
1 回答
96 浏览

c - 文件指针似乎停止前进

我正在将一个日志监视程序从使用 sys/inotify.h 的 Linux 移植到将使用 kqueues 的 OS X。这个想法是 kqueue 将使用文件描述符来监视文件的更改。一旦文件发生变化,一个不同的函数将传递一个文件指针并扫描文件的变化,寻找特定的数据。原始文件数据将打印到 stdout,扫描的数据将打印到 stderr。kqueue 似乎很好地监视日志,每次更改返回正确的字节数。扫描功能似乎无法正常工作。

kqueue 循环:

scan_log 功能:

该程序的 Linux 版本未更改 scan_log 函数,即使从未进入 scan_log 中的 for 循环,也已验证该程序可以正常工作。有时没有必要。

发生的事情是日志中没有任何内容被打印到 stderr 或 stdout。我在 scan_log 前后调用 ftell 来观察 fp 的位置。它第一次移动,但以后不再移动。在任何一种情况下,都不会将数据打印到 stdout/stderr。

编辑:更新了 scan_log() 代码以包括缺少的 fprintf 调用。

0 投票
2 回答
703 浏览

c - kqueue EV_ENABLE 和 EV_DISABLE 的目的是什么

我试图了解 kqueue 中 EV_DISABLE 和 EV_ENABLE 的用例。

现在,当最后一次调用kevent()返回时,ev.udataNULL而不是somePtr. 如果即使未设置 EV_ADD 也kevent()更新指针,而不是仅启用事件,那么允许您添加禁用事件的原因是什么?udata

0 投票
2 回答
3416 浏览

c - 带有 kqueue 的 TCP 服务器工作者

我最近对内核事件进行了一些测试,结果如下:

  • 使用内核事件来接受套接字是否有意义?我的测试表明我一次只能处理一个接受(即使事件列表数组更大)(对我来说很有意义,因为 .ident == sockfd 仅适用于一个套接字)。

  • 我以为kevent的使用主要是一次从多个socket中读取。真的吗?

这是 TCP 服务器如何使用 kqueue 实现完成的吗?:


  • 监听线程(无 kqueue)
    • 接受新连接并将 FD 添加到 worker kqueue。 问题:这甚至可能吗?我的测试显示是的,但它是否保证工作线程会知道这些更改并且 kevent 真的是线程安全的?

  • 工作线程(带 kqueue)

    • 等待对从侦听线程添加的文件描述符的读取。

    问题:一次检查更新有多少个套接字有意义?


谢谢

0 投票
1 回答
5857 浏览

unix - select、epoll、kqueue 和 evport 之间的根本区别是什么?

我最近在读 Redis。Redis 实现了一个基于 I/O 多路复用的简单事件驱动库。Redis 表示会选择系统支持的最佳复用,并给出如下代码:

我想知道他们是否有根本的性能差异?如果是这样,为什么?

此致

0 投票
1 回答
111 浏览

c - 异步 I/O 和耗时的工作

我知道异步套接字编程比同步更具可扩展性。

但是有一点我不太了解:

如果您的事件循环应该是非阻塞的,您如何将耗时的工作委托给另一个线程而不阻塞?工作队列通常需要互斥体来保护。我知道有无锁队列,但这是如何完成的?有人可以给这个东西一点概念吗?

0 投票
1 回答
161 浏览

file - 监控数千个文件以进行移动、删除和重命名的最佳 Cocoa 方法?

我有一个应用程序,该应用程序将文件数据库保存在用户计算机上,或者可能位于可能在线或不在线的网络卷上。该数据库可能是位于不同文件夹中的数千个文件。当文件名更改、移动或删除时,监视它们以接收通知的最佳方法是什么?

我之前曾将 FSEvents 用于单个目录,但我猜测它不能很好地扩展到几千个单独的文件。使用 kqueue 怎么样?

我也许可以尝试维护一个动态的文件夹列表,试图用尽可能少的文件夹包含所有文件,但这意味着阅读完整列表并试图找出共同的祖先等。

想法或建议?

0 投票
0 回答
49 浏览

ios - wifi连接失败iPad

我正在开发一个与服务器通信的应用程序。通常只有当我终止应用程序并重新启动它时,通信才会中断并再次工作。从设备日志中我发现了这个错误信息

我浏览了以下帖子,但什么都不懂,请帮助我找出根本原因以及如何解决此问题。

0 投票
1 回答
286 浏览

macos - Obtain siginfo_t when handling signals with kqueue

Is there a way to obtain siginfo_t struct when handling signals with kqueue? (On Linux when handling signal with epoll similar struct signalfd_siginfo is obtained by simply reading from signalfd)

0 投票
1 回答
570 浏览

linux - 在 FreeBSD 上监控真正大目录的最有效方法是什么

我有一个 FreeBSD 安装和一个非常大的目录结构,其中包含 10TiB 的小文件。

我想以编程方式监视和处理事件,例如创建新文件或修改现有文件。我曾尝试使用kqueue(),但它需要打开每个目录和文件。遍历整个目录结构花费的时间太长,而且永远无法在足够的时间内完成。(我什至离开了一个晚上,没有成功。)

在 FreeBSD 上是否有另一种方法可以有效地做同样的事情?

顺便问一下,Linux 是否使用 inotify 处理如此大量的数据?

感谢您的任何建议!