加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 光纤局部与线程局部变量

发布时间:2020-12-17 02:22:39 所属栏目:百科 来源:网络整理
导读:我很困惑何时在rails中使用光纤局部变量而不是线程局部变量. 我的用例如下: 我在rails中有一个控制器,它在GET请求中进行一些计算并将结果(这是一个整数列表)存储在光纤或线程局部变量中.我需要这样做,以便我可以超出这个计算结果,让我们说一个可能由控制器
我很困惑何时在rails中使用光纤局部变量而不是线程局部变量.
我的用例如下:
我在rails中有一个控制器,它在GET请求中进行一些计算并将结果(这是一个整数列表)存储在光纤或线程局部变量中.我需要这样做,以便我可以超出这个计算结果,让我们说一个可能由控制器创建的模型.现在我不想将它存储在会话中,因为必须对每个GET请求进行此计算.我也在控制器中的GET方法完成之前清除了光纤/线程局部变量.

现在我确实看到Fiber和Thread都是完全不同的,因此它们的存储变量也是如此.任何人都可以解释何时使用哪种变量?

其实我的理解如下:
似乎两个请求永远不能同时在同一光纤/线程中提供.因此,如果我有一个我想要放入请求范围的值,那么任何一个都应该没问题.我的解释是否正确?

解决方法

答案取决于您的Web服务器是否利用线程或光纤同时为多个用户提供服务.

令人惊讶的ruby网络服务器数量都没有使用 – 它们或者一次只服务一个客户端(比如Webrick和Thin),或者使用进程来服务多个用户(比如乘客通过nginx).

但是,似乎有一个答案可以在每种情况下工作(多线程,多光纤或多进程),这要归功于小的实现优势,如blog post所示:

Ruby Thread Locals are also Fiber-Local

I was briefly concerned that thread-local variables would not also be
Fiber-local,since fibers have their own stack. This would be a
problem for any code which uses thread-local variables to delimit a
stack context,e.g. to implement dynamically-scoped variables or to
prevent recursion. My fears,however,were easily allayed.

Once again,Ruby gets the little things right.

底线 – 使用线程本地 – 它应该工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读