首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >纤维局部变量与线程局部变量

纤维局部变量与线程局部变量
EN

Stack Overflow用户
提问于 2014-05-27 13:59:07
回答 1查看 2.2K关注 0票数 4

对于何时在rails中使用光纤局部变量而不是线程局部变量,我感到非常困惑。我的用例如下:

我在rails中有一个控制器,它在GET请求中进行一些计算,并将结果(即整数列表)存储在光纤或线程局部变量中。我需要这样做,这样我就可以超过这个计算结果,比如说,一个可能由控制器创建的模型。现在我不想将它存储在会话中,因为这个计算必须针对每个GET请求进行。在控制器完成GET方法之前,我还清理了光纤/线程局部变量。

现在,我确实看到了光纤和线程是非常不同的,因此它们的存储变量也是不同的。谁能解释一下什么时候使用哪种变量?

实际上,我的理解是:两个请求似乎永远不能同时在同一个纤维/线程中处理。因此,如果我想将一个值放入请求范围,那么任何一个都应该是可以的。我的解释正确吗?

EN

回答 1

Stack Overflow用户

发布于 2014-05-27 15:19:05

答案将取决于您的web服务器是否利用线程或光纤同时为多个用户服务。

令人惊讶的是,许多ruby服务器都没有使用--它们要么一次只为一个客户端服务(比如Webrick和Thin),要么使用进程为多个用户服务(比如nginx上的乘客)。

然而,似乎有一个答案将适用于每一种情况(多线程、多光纤或多进程),这要感谢小的实现支持,如本博客帖子所示。

Ruby线程局部变量也是光纤本地的 我曾短暂地担心线程局部变量也不会是光纤局部变量,因为光纤有自己的堆栈。对于任何使用线程局部变量来分隔堆栈上下文的代码来说,这都是一个问题,例如实现动态作用域变量或防止递归。然而,我的恐惧很容易消除。 再说一次,Ruby把小事情做对了。

底线-使用线程-本地-它应该可以工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23891511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档