分享 config.threadsafe!: JUST DO IT

huacnlee · 2012年04月26日 · 最后由 hooopo 回复于 2012年04月27日 · 3405 次阅读

Railsconf 上面的:

关于 Rails 里面 config.threadsafe! 这个配置

http://speakerdeck.com/u/tarcieri/p/configthreadsafe-just-do-it

如果用 fiber 实现并发就好了。

config.threadsafe! 这个功能开启我之前 ytrip.com 那个项目尝试过,结果跑不起来,后面也没有再关注过。 有人在实际项目中用它么?

这个你需要确保自己引用的每个 gem 都是 threadsafe 的。

如果有分析 gemfile.lock 文件的服务来查询当前项目的 gem 是不是 threadsafe 就太好了。

#3 楼 @Saito 还要项目的代码是 threadsafe!

如何确定代码是不是 threadsafe 的?

#3 楼 @Saito 这个要求过强了,web 开发中,主要还是要区分清楚 request 之间的数据,很多代码本来就不会重入,所以不必要求可重入性

这几天我遇到了线程安全的问题,我使用的是 xmpp4r gem,总是报错。实在没有办法了。看了这篇 topic, 加入配置后,就解决了~~

这个 slide 我看过了。我把自己的理解发在这里, 1、green-threaded 并不会被 GIL 限制。通过 config.threadsafe! 加到 application 可以提高程序执行效率。 2、通过http://railsplugins.org/ 可以查到哪些 gem 支持 threadsafe!

GIL 的影响在于单进程不能在多核的情况下实现并行,需要一个 core 一个进程。 1.8 的线程差了些,context switch 开销大,不过 web app 应该还好。1.9 和其他的 ruby 实现都用 native thread 了。

好像记得 N 久之前在 javaeye 看到 robbin 说过,多线程与多进程相比更有优势,主要是编写程序更容易,但是效率上基本持平,回头我去翻翻帖子

#5 楼 @huacnlee 有可能修改共享内存的代码都不是线程安全的。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号