问题标签 [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.
c++ - 当消息泵处于空闲状态时,User32 SendMessage 挂起
我有一个用于第三方应用程序的多线程 dll。我的 dll 通过使用自定义消息类型调用 SendMessage 将消息调用到主 UI 线程:
该应用程序是MDI,我正在后台执行打开文档/提取内容/进程/保存一堆文档,因此它不断切换活动文档并打开和关闭新文档。
我的问题是,有时处理在尝试使用上述 InvokeSync() 函数将消息调用到主线程时会卡住。
当我在调试器中暂停它时,我看到主线程有这个调用堆栈:
被锁定的后台线程有一个这样的调用堆栈:
所以它似乎卡在“SendMessage()”调用上,但据我所知,主线程上的消息泵正闲置在那里。
但是,如果我手动单击一个非活动文档(使其处于活动状态),不知何故这会唤醒所有内容,并且 SendMessage() 事件最终会通过,并恢复处理。
主应用程序使用 Microsoft Fibers,每个文档 1 根光纤。我的 SendMessage 是否会卡在被关闭的背景光纤中?在光纤处于非活动状态或其他情况之前在光纤上,并且只有通过强制上下文切换,该光纤才能处理其消息?我真的不明白线和纤维是如何相互作用的,所以我有点抓住稻草。
什么可能导致消息像这样未经处理而坐在那里?更重要的是,有没有办法防止这种情况发生?或者至少,我该如何调试这种情况?
c# - 光纤与异步等待
我正在加入一个 C# 项目,其中开发人员大量使用Fibers。在这个项目之前,我什至没有听说过它们,async await
并且以前在我的多任务操作中使用过。今天我问他们为什么用s,主要开发者说他更容易调试。这意味着他知道特定函数来自哪个线程,甚至可以访问堆栈中更高的变量。Threads
BackgroundWorker
Fiber
Fiber
我想知道使用s 与使用 newasync await
和 using s 的优缺点是什么Thread
。
PS:我们使用的是 .Net 4.5
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.)
multithreading - 线/纤维 - 澄清
我对“纤维”的概念感到有点困惑,因为它们与 1)线程和 2)它们被内核视为什么。
据我了解,纤程是由线程创建并由其创建线程管理的线程(即,可能是调度程序?)。但是,出于所有密集目的,我认为它仍然是一个“线程”,并且被内核视为这样。
我从一位同事那里得到的解释是,纤维对内核完全不可见,并且完全在用户空间中运行,并且绝不是“线程”,根据他的电子邮件:
线程有时在用户空间库中实现,因此称为用户线程。内核不知道它们,因此它们在用户空间中进行管理和调度。一些实现将它们的用户线程建立在几个内核线程之上,以从多处理器机器(M:N 模型)中受益。在本文中,术语“线程”(没有内核或用户限定符)默认指的是内核线程。由虚拟机实现的用户线程也称为绿色线程。用户线程通常可以快速创建和管理,但不能利用多线程或多处理,并且如果所有相关的内核线程都被阻塞,即使有一些用户线程准备好运行,也会被阻塞。
纤程是一种更轻量级的调度单元,它是协作调度的:运行中的纤程必须明确“让步”以允许另一个纤程运行,这使得它们的实现比内核或用户线程容易得多。可以安排纤程在同一进程中的任何线程中运行。这允许应用程序通过自己管理调度来获得性能改进,而不是依赖内核调度程序(可能不会针对应用程序进行调整)。OpenMP 等并行编程环境通常通过纤程实现其任务。与纤程密切相关的是协程,区别在于协程是语言级别的构造,而纤程是系统级别的构造。
我希望就纤程的确切含义得到更好的解释(就操作系统/内核而言,它是一个实际的线程,并且只是由它的创建线程管理吗?)。
我通过谷歌搜索对其进行了广泛的研究,但在我看过的所有地方都只找到了一个简单的答案,包括这里:“纤维是由线程创建和管理的线程。”
如果有人有更多信息可以分享或指向我,将不胜感激。我的同事的论点是 Golang 的 Goroutines 使用“纤维”并且这些纤维对操作系统是不可见的 - 因此,纤维的“正确”实现。我个人觉得 Goroutine 和协程的关系更密切,根本没有实现 Fiber/thread 的场景……
meteor - 流星:建设中的问题。错误找不到模块“纤维”
我们有一个流星应用程序。它正在使用命令构建
meteor build .
现在,我提取从上述步骤创建的 tar.gz 并转到 main.js 位置。现在当我执行 node main.js 时,它给出了以下错误:
无法运行此应用程序。有人可以提出一些建议吗
javascript - 尝试安装节点光纤时出错
我正在尝试在没有 Internet 连接的 Windows 服务器上安装节点光纤以与我的 Meteor 应用程序一起使用。programs/server/node_modules/fibers
我已经根据包自述文件将纤维文件从 github 手动复制到目录中。我现在正试图npm install --verbose
从那个目录运行。我收到以下错误:
请注意,我已经在服务器上安装了节点 v0.10.40(node -v
确认这一点),所以我不明白为什么它试图再次从互联网下载这个版本。
ruby - FiberError:使用 em-synchrony 的“跨线程调用光纤”
我在 sidekiq 工作人员中使用 em-synchrony 和 em-http-request (Ruby 2.1) 同时抓取多个链接。一切正常,除非我尝试同时使用刮板运行多个工人。这是我正在使用的代码:
当这个工作进程在同时运行多个实例的情况下运行时,它最终会抛出以下错误:
meteor - Meteor.js 服务器方法队列
我在 Meteor 中有一个方法需要一些时间来执行,并且这个方法被调用了很多次,参数不同。
但是客户端可以在数据仍在加载时更改参数,所以我希望服务器能够以某种方式清除方法队列。那可能吗
因此,仅举个例子:
服务器:
客户:
我不想使用 this.unblock(),因为该方法使用的是 MS SQL 连接,如果它仍然执行,它会占用大量对服务器的不需要的请求。
希望有人有一些想法?:)
// 彼得
linux - 更新后流星崩溃 - 路径的路径已按名称存在
嗨SO社区我有这个应用程序,在我升级到最新版本的流星(1.3)后,应用程序在启动时失败。
输出显示此错误 4 次(看起来流星试图运行 5 次相同的路由文件)
我试图为所有路线命名,但不起作用
我希望我能得到任何帮助
祝你今天过得愉快
multithreading - 如果不在纤维中调用产量会发生什么?
正如我从文档中了解到的那样,yield()
功能是将控制权传递给另一根光纤。如果我们不在 D 中调用纤维中的产量会发生什么?这是否意味着线程会挂起?
或者我错误地理解纤维在线程内部工作并且它们在进程内部工作?过程可以有 orthreads
或fibers
?