问题标签 [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.
ubuntu - 错误 npm install fiber@1.0.1 Ubuntu 12.04.4 x64
当我尝试部署我的流星应用程序时
我收到以下错误
当我尝试使用流星网站上所述的命令安装光纤模块时
我收到以下错误
接着
该怎么办?
谢谢!
c - 交换到 ucontext_t 的 uc_link 时 swapcontext 段错误
我正在使用通常的 makecontext/swapcontext 例程在 C 中编写一个小型的概念验证纤维库,但这给我带来了一些麻烦(我的平台是 OSX 10.9 Mavericks,使用clang-503.0.40
)。
这是我正在处理的数据结构:
这是迷你库(三个函数,fiber_init
、fiber_run
和fiber_yield
:
不过,似乎在纤程中调用 fiber_yield() 并没有正确地将上下文与调用者的上下文交换(其引用存储在纤程上下文的 uc_link 中,请参见current_fiber->context.uc_link
内部fiber_yield
)
运行该程序的痕迹:
产生输出:
我读过 OSX 有堆栈对齐限制(到 16 字节边界),但我malloc
用来分配堆栈,它返回一个与 16 字节边界对齐的块(或者我已经读过)。也就是说,似乎重新排列声明的顺序有时会导致段错误不会发生,但它非常虚假且难以重现。
在调用 swapcontext 之前检查fiber_yield
显示current_fiber->context
堆栈大小非常大;比它应该的要大得多。也许这是腐败的迹象:
任何线索可能会发生什么?谢谢!
ruby-on-rails - 光纤局部变量与线程局部变量
我对何时在 Rails 中使用纤维局部变量而不是线程局部变量感到非常困惑。我的用例如下:
我在 rails 中有一个控制器,它在 GET 请求上进行一些计算并将结果(这是一个整数列表)存储在光纤或线程局部变量中。我需要这样做,以便我可以超出这个计算结果,让我们说一个可能由控制器创建的模型。现在我不想将它存储在会话中,因为必须为每个 GET 请求完成此计算。我还在控制器中的 GET 方法完成之前清除了光纤/线程局部变量。
现在我确实看到 Fiber 和 Thread 完全不同,因此它们的存储变量也不同。谁能解释一下何时使用哪种变量?
实际上我的理解如下:似乎永远不能同时在同一个光纤/线程中提供两个请求。因此,如果我有一个想要放入请求范围的值,那么任何一个都可以。我的解释正确吗?
javascript - Meteor 0.9.1.1 - 从 json 端点填充到服务器端集合
我正在编写一个包作为我正在处理的一个小型应用程序的一部分,我需要做的一件事是从端点获取 json 数据并将其填充到服务器端集合。
我一直收到错误消息,告诉我需要将服务器端集合更新函数放入 Fiber、Meteor.bindEnvironment 或 Meteor._callAsync。
我很困惑,因为没有清晰简洁的解释告诉我这些到底是做什么的,它们是什么,是否以及何时被弃用,或者它们的使用是否是好的做法。
这是我的包文件中重要的内容
一些伪代码:
1) 设置 Mongo.Collection 项目列表
2) 使用我编写的名为 httpFetch() 的函数填充这些,并为每个集合运行它,如果获取成功,则返回已解决的承诺。
3) 在下划线 each() 循环中调用此 httpFetch 函数,遍历我拥有的每个集合,获取 json 数据,并尝试将其插入服务器端 Mongo DB。
Collections.js 如下所示。将插入函数包装在 Fiber 中似乎可以抑制错误消息,但没有数据被插入到数据库中。
* 服务器端组件向远程 * 端点发出请求以填充服务器端 Mongo 集合。* * @class 服务器 * @static */ 服务器 = {
};
我仍然真的被困在这个问题上,从我之前阅读其他帖子的尝试来看,我似乎仍然无法弄清楚让这个工作或让它工作的“最佳实践”方式。
2011/2012 年有很多建议,但我不愿意使用它们,因为 Meteor 不断变化,即使是一个小的更新也会破坏很多东西。
谢谢
asynchronous - 如何在 Meteor 中使用 wrapAsync
我无法弄清楚如何使用 Meteor 正确使用 wrapAsync。我目前正在使用 node-apac 和亚马逊产品广告 API。
如果我试图运行以下代码,我该如何异步运行它:
我尝试观看多个视频,但遇到了问题
node.js - 部署到 Heroku 时不推荐使用 Meteor Fiber
我正在使用我曾经可以工作的buildpack将我的 Meteor 应用程序部署到 Heroku 。我有很短的时间没有进行任何部署,今天我这样做有问题。安装 NPM 依赖项时出现错误。它说纤维有问题。这是日志:
你有过这样的问题吗?你知道为什么会这样吗?
node.js - 自托管 Meteor App 光纤问题
早上好
最近几天我遇到了这个问题,我对缺乏支持/文档感到非常沮丧。我的错误如下:
/usr/share/nginx/html/bundle/programs/server/node_modules/fibers/future.js:245 throw(ex); ^ 错误:模块没有自行注册。在 Module.load (module.js:355:32) 在 Function.Module._load (module.js:310:12) 在 Module.require (module.js:365:17) 在 require (module .js:384:17) 在 Object.Npm.require (/usr/share/nginx/html/bundle/programs/server/boot.js:142:18) 在 packages/npm-node-aes-gcm/wrapper。 js:2:1 在 /usr/share/nginx/html/bundle/programs/server/packages/npm-node-aes-gcm.js:33:4 在 /usr/share/nginx/html/bundle/programs/ server/packages/npm-node-aes-gcm.js:42:3 at /usr/share/nginx/html/bundle/programs/server/boot.js:222:10 错误:永远检测到脚本退出代码:1
纤维 -v 1.0.5 节点 -v 0.12.4 流星 -v 1.1.0.2
任何帮助表示赞赏
c++ - 在 Windows、TIB 和异常上修改堆栈
我的问题的起源实际上源于希望在 Windows 上提供支持用户提供堆栈的 pthread 实现。具体来说,pthread_attr_setstack
应该做一些有意义的事情。我的实际要求比这更复杂,但这对于帖子的目的来说已经足够了。
在 Fiber 或 Thread API 中没有用于提供堆栈的公共 Win API。我四处寻找偷偷摸摸的后门、变通方法和黑客,没有任何进展。事实上,我查看了 winpthread 的灵感来源,并忽略了提供给pthread_attr_setstack
.
相反,我尝试了以下“解决方案”,看看它是否可行。我使用和ConvertThreadToFiber
的通常组合创建了一个 Fiber 。在我提供了一个最小的堆栈大小。然后在光纤的入口点为堆栈分配内存,适当更改 TIB 字段:“堆栈基础”和“堆栈限制”(参见此处:http ://en.wikipedia.org/wiki/Win32_Thread_Information_Block ),然后将 ESP 设置为我的堆栈的高地址。CreateFiberEx
SwitchToFiber
CreateFiberEx
(在现实世界的情况下,我会比这更好地设置堆栈并更改 EIP,以便此步骤的行为更像 posix 函数swapcontext
,但你明白了)。
如果我在这个不同的堆栈上进行任何操作系统调用,那我就完蛋了(printf
例如死了)。不过这对我来说不是问题。我可以确保在我的自定义堆栈上时我永远不会确保调用(因此我说我的实际需求涉及更多)。除了...我需要例外才能工作。他们没有!具体来说,如果我尝试在修改后的堆栈上抛出并捕获异常,那么我会得到一个断言
0xXXXXXXXX 处未处理的异常 ....
所以我的(含糊的)问题是,有没有人知道异常和自定义堆栈如何不能很好地结合在一起?我很欣赏这是完全不受支持的,并且可以很高兴地除了零响应或“走开”。事实上,我几乎已经决定我需要一个不同的解决方案,尽管这涉及到妥协,但我很可能会使用一个。但是,好奇心使我变得更好,所以我想知道为什么这不起作用。
在相关的说明中,我想知道 Cygwin 如何为 ucontext 处理这个问题。这里的源码http://szupervigyor.ddsi.hu/source/in/openjdk-6-6b18-1.8.13/cacao-0.99.4/src/vm/jit/i386/cygwin/ucontext.c使用GetThreadContext
/SetThreadContext
来实现上下文。但是,从实验中我看到,当从新上下文中抛出异常时,这也会失败。事实上,该SetThreadContext
调用甚至不会更新 TIB 块!
编辑(基于@avakar 的回答)
以下代码与您的代码非常相似,演示了同样的失败。不同之处在于我没有启动第二个挂起的线程,而是将其挂起然后尝试更改上下文。当 try-catch 块被命中时,此代码显示了我所描述的错误foo
。也许这根本不合法。值得注意的是,在这种情况下ExceptionList
,TIB 的成员在被调用时是一个有效的指针modifyThreadContext
,而在您的示例中它是-1。手动编辑它没有帮助。
正如我对您的回答的评论中提到的那样。这不正是我所需要的。我想从我当前所在的线程切换上下文。但是,文档SetThreadContext
警告不要在活动线程上调用它。所以我猜如果下面的代码不起作用,那么我就没有机会让它在单个线程上工作。
node.js - 在 node.js 中使用纤维的潜在问题是什么?
我打算在 node.js 中尝试使用纤维?我应该考虑哪些潜在问题?看起来纤维与简单的事件循环和 node.js 的单线程设计的良好设计完全相反。