问题标签 [fibers]

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 投票
2 回答
724 浏览

c++ - 当消息泵处于空闲状态时,User32 SendMessage 挂起

我有一个用于第三方应用程序的多线程 dll。我的 dll 通过使用自定义消息类型调用 SendMessage 将消息调用到主 UI 线程:

该应用程序是MDI,我正在后台执行打开文档/提取内容/进程/保存一堆文档,因此它不断切换活动文档并打开和关闭新文档。

我的问题是,有时处理在尝试使用上述 InvokeSync() 函数将消息调用到主线程时会卡住。

当我在调试器中暂停它时,我看到主线程有这个调用堆栈:

被锁定的后台线程有一个这样的调用堆栈:

所以它似乎卡在“SendMessage()”调用上,但据我所知,主线程上的消息泵正闲置在那里。

但是,如果我手动单击一个非活动文档(使其处于活动状态),不知何故这会唤醒所有内容,并且 SendMessage() 事件最终会通过,并恢复处理。

主应用程序使用 Microsoft Fibers,每个文档 1 根光纤。我的 SendMessage 是否会卡在被关闭的背景光纤中?在光纤处于非活动状态或其他情况之前在光纤上,并且只有通过强制上下文切换,该光纤才能处理其消息?我真的不明白线和纤维是如何相互作用的,所以我有点抓住稻草。

什么可能导致消息像这样未经处理而坐在那里?更重要的是,有没有办法防止这种情况发生?或者至少,我该如何调试这种情况?

0 投票
1 回答
6707 浏览

c# - 光纤与异步等待

我正在加入一个 C# 项目,其中开发人员大量使用Fibers。在这个项目之前,我什至没有听说过它们,async await并且以前在我的多任务操作中使用过。今天我问他们为什么用s,主要开发者说他更容易调试。这意味着他知道特定函数来自哪个线程,甚至可以访问堆栈中更高的变量。ThreadsBackgroundWorkerFiber

Fiber我想知道使用s 与使用 newasync await和 using s 的优缺点是什么Thread

PS:我们使用的是 .Net 4.5

0 投票
1 回答
215 浏览

ruby - Fiber.yield using ||

I would like some help with the following code:

When run, outputs:

How does line 6 s = Fiber.yield(square) || s work? I think I understand the component parts just not what the line as a whole is doing. (Is there an alternative way of writing this that might better help me understand?).

(Edit: This code is a very slightly modified example from page 295 'Beginning Ruby, From Novice to Professional 2nd Ed' by Peter Cooper.)

0 投票
0 回答
366 浏览

multithreading - 线/纤维 - 澄清

我对“纤维”的概念感到有点困惑,因为它们与 1)线程和 2)它们被内核视为什么。

据我了解,纤程是由线程创建并由其创建线程管理的线程(即,可能是调度程序?)。但是,出于所有密集目的,我认为它仍然是一个“线程”,并且被内核视为这样。

我从一位同事那里得到的解释是,纤维对内核完全不可见,并且完全在用户空间中运行,并且绝不是“线程”,根据他的电子邮件:

线程有时在用户空间库中实现,因此称为用户线程。内核不知道它们,因此它们在用户空间中进行管理和调度。一些实现将它们的用户线程建立在几个内核线程之上,以从多处理器机器(M:N 模型)中受益。在本文中,术语“线程”(没有内核或用户限定符)默认指的是内核线程。由虚拟机实现的用户线程也称为绿色线程。用户线程通常可以快速创建和管理,但不能利用多线程或多处理,并且如果所有相关的内核线程都被阻塞,即使有一些用户线程准备好运行,也会被阻塞。

纤程是一种更轻量级的调度单元,它是协作调度的:运行中的纤程必须明确“让步”以允许另一个纤程运行,这使得它们的实现比内核或用户线程容易得多。可以安排纤程在同一进程中的任何线程中运行。这允许应用程序通过自己管理调度来获得性能改进,而不是依赖内核调度程序(可能不会针对应用程序进行调整)。OpenMP 等并行编程环境通常通过纤程实现其任务。与纤程密切相关的是协程,区别在于协程是语言级别的构造,而纤程是系统级别的构造。

我希望就纤程的确切含义得到更好的解释(就操作系统/内核而言,它是一个实际的线程,并且只是由它的创建线程管理吗?)。

我通过谷歌搜索对其进行了广泛的研究,但在我看过的所有地方都只找到了一个简单的答案,包括这里:“纤维是由线程创建和管理的线程。”

如果有人有更多信息可以分享或指向我,将不胜感激。我的同事的论点是 Golang 的 Goroutines 使用“纤维”并且这些纤维对操作系统是不可见的 - 因此,纤维的“正确”实现。我个人觉得 Goroutine 和协程的关系更密切,根本没有实现 Fiber/thread 的场景……

0 投票
0 回答
1395 浏览

meteor - 流星:建设中的问题。错误找不到模块“纤维”

我们有一个流星应用程序。它正在使用命令构建 meteor build . 现在,我提取从上述步骤创建的 tar.gz 并转到 main.js 位置。现在当我执行 node main.js 时,它给出了以下错误:

无法运行此应用程序。有人可以提出一些建议吗

0 投票
0 回答
333 浏览

javascript - 尝试安装节点光纤时出错

我正在尝试在没有 Internet 连接的 Windows 服务器上安装节点光纤以与我的 Meteor 应用程序一起使用。programs/server/node_modules/fibers我已经根据包自述文件将纤维文件从 github 手动复制到目录中。我现在正试图npm install --verbose从那个目录运行。我收到以下错误:

请注意,我已经在服务器上安装了节点 v0.10.40(node -v确认这一点),所以我不明白为什么它试图再次从互联网下载这个版本。

0 投票
0 回答
332 浏览

ruby - FiberError:使用 em-synchrony 的“跨线程调用光纤”

我在 sidekiq 工作人员中使用 em-synchrony 和 em-http-request (Ruby 2.1) 同时抓取多个链接。一切正常,除非我尝试同时使用刮板运行多个工人。这是我正在使用的代码:

当这个工作进程在同时运行多个实例的情况下运行时,它最终会抛出以下错误:

0 投票
1 回答
401 浏览

meteor - Meteor.js 服务器方法队列

我在 Meteor 中有一个方法需要一些时间来执行,并且这个方法被调用了很多次,参数不同。

但是客户端可以在数据仍在加载时更改参数,所以我希望服务器能够以某种方式清除方法队列。那可能吗

因此,仅举个例子:

服务器:

客户:

我不想使用 this.unblock(),因为该方法使用的是 MS SQL 连接,如果它仍然执行,它会占用大量对服务器的不需要的请求。

希望有人有一些想法?:)

// 彼得

0 投票
0 回答
136 浏览

linux - 更新后流星崩溃 - 路径的路径已按名称存在

嗨SO社区我有这个应用程序,在我升级到最新版本的流星(1.3)后,应用程序在启动时失败。

输出显示此错误 4 次(看起来流星试图运行 5 次相同的路由文件)

我试图为所有路线命名,但不起作用

我希望我能得到任何帮助

祝你今天过得愉快

0 投票
2 回答
157 浏览

multithreading - 如果不在纤维中调用产量会发生什么?

正如我从文档中了解到的那样,yield()功能是将控制权传递给另一根光纤。如果我们不在 D 中调用纤维中的产量会发生什么?这是否意味着线程会挂起?

或者我错误地理解纤维在线程内部工作并且它们在进程内部工作?过程可以有 orthreadsfibers?