阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

Rails 综合报道:Rails 2.2 将会是线程安全的,Rails Edge 支持 ETags

  • 2008-09-08
  • 本文字数:1234 字

    阅读完需:约 4 分钟

David Heinemeier Hansson 最近提到 Rails 2.2 将会修补一个 Rails 存在已久的问题:其缺乏线程安全性。Charles Nutter 在文章中进一步阐述了线程安全的 Rails 意味着什么

本质上,其意味着去掉每个输入的请求所添加的较为粗糙的锁,取而代之的是为需要在线程间共享的资源加上更为精细的锁。采用的方法如,日志子系统中的数据结 构要么修改成不在线程间共享,要么需要设计恰当的锁机制以保证两个线程之间不会发生交互,不会影响彼此的数据结构或发生冲突。对于一个数据库实例我们不是 分别建立其单独的数据库连接,而是使用连接池,这样使得 N 个数据库连接可以供 M 个并发请求使用。这同时意味着潜在的包含执行数据库操作的请求不需要耗费一个连接,因此活动的连接数目通常少于可以并发处理的请求个数。

Rails Github repository 提交的例子和说明显示了最近完成的线程安全相关的工作: - “MemoryStore 是唯一‘不安全’的存储。保证其缺省是线程安全的。”

由于 Rails 缺乏线程安全的机制,需要使用多个独立的 Ruby 进程来为 Rails 应用服务,也就是使用非共享的方法。为了解决这个问题,也提出了很多技术和解决方案。 比如 Phusion Passenger 使用了一个修改的 Ruby 版本(基于写时拷贝友好的 GC),这种方法使得可以在 Ruby 实例间共享一些加载好的代码。这样也让管理一组程序的变得更为容易了。JRuby 允许在相同的 JVM(允许一定的代码共享) 中运行多个 JRuby 实例,从而减少多个 Rails 实例的运行开销。 即便是有线程安全的特性,Rails 站点仍然需要多个实例。其中的一个原因在于在 Ruby 1.8 中的用户空间线程系统,一个阻塞的 I/O 调用会阻塞解释器中所有的线程。尽管当前很多 I/O 库都使用非阻塞方式,但当前的 Mysql 适配器不是 (实际上,问题源于 C 库没有释放解释器的锁)。不过有些数据库适配器支持非阻塞的请求,比如 Postgresql 适配器。

Never_block 是一个方便这些适配器使用的库,尽管暂时需要 Ruby 1.9 版本。 将应用分布于多个解释器也可以利用多核系统的优势,但实际上,纯用户空间线程不允许这样。

Rails Edge 的另一个新特性是支持更简单的有条件 Get

“有条件 GET” 是专用于 HTTP 的一个功能,其提供给 web 服务器一种方法来告知浏览器,GET 请求的结果没有变化,因此可以放心的从浏览器缓存中直接获取结果。

Tim Bray 对 ETags 进行了简单的介绍同时对其解决的问题也做了说明:

但是有的时候,一个单独的时间戳信息不够服务器判断客户端是否需要刷新其所请求的拷贝。
ETags 正是用于这种情况下的。其工作的原理是:当一个客户端发送 GET 请求时,除了将其请求的结果发送回去外,还需要返回一个 HTTP 头,格式类似于:
ETag: “1cc044-172-3d9aee80”
在引号中的是一个签名,反映了请求的资源的当前状态。

查看英文原文: Rails Roundup: Rails 2.2 Will Be Threadsafe, ETags Support in Rails Edge

2008-09-08 21:14728

评论

发布
暂无评论
发现更多内容

TimeWise-Jira工时管理插件6.0.0发布!对比测评某知名工时插件,谁的数据处理性能更胜一筹?

龙智—DevSecOps解决方案

TimeWise Jira工时管理插件

🔥🔥🔥序幕:AIGC 进入“平民化”时代

石头爱分享

AI openai AIGC GPT-4 MidJourney

深度学习与预训练语言的突破

百度开发者中心

自然语言处理 大模型训练 人工智能「

预训练模型在NLP中的应用与优化

百度开发者中心

自然语言处理 大模型训练 #人工智能

一文教你如何发挥好 TDengine Grafana 插件作用

TDengine

时序数据库 ​TDengine

大模型训练:文本分类的未来之路

百度开发者中心

大模型训练 #人工智能

小灯塔系列-中小企业数字化转型系列研究——CDP测评报告

人称T客

Red Giant Trapcode Suite for Mac(红巨星粒子插件) 2024.0.1永久激活版

mac

苹果mac Windows软件 红巨星粒子插件 Red Giant Trapcode Suite

如何精细化管理嵌入式软件项目?ACT汽车电子与软件技术周演讲回顾

龙智—DevSecOps解决方案

🔥🔥🔥还没搞懂嵌入(Embedding)、微调(Fine-tuning)和提示工程(Prompt Engineering)?

石头爱分享

Embedding openai AIGC GPT-4 prompt 工程

如何有效的给出反馈(二)

ShineScrum捷行

反馈 敏捷教练 敏捷教练引导 高管

用友招聘云助力中企出海,充盈全球化人才蓄水池

用友BIP

招聘 中企出海

如何利用动态配置中心在JavaAgent中实现微服务的多样化治理

华为云开发者联盟

云计算 后端 云服务 华为云 华为云开发者联盟

聊聊JDK19特性之虚拟线程 | 京东云技术团队

京东科技开发者

Java JVM 虚拟线程 jdk19 企业号10月PK榜

【后台体验】运营后台订单详情设计分享 | 京东云技术团队

京东科技开发者

后台开发 后台管理系统 订单系统 企业号10月PK榜 运营后台

[大厂实践] 重新发明后端子集

俞凡

算法 Google 大厂实践

游戏和 NFT 的以太坊代币开发

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 链游开发 NFT开发

分布式事务:XA和Seata的XA模式 | 京东物流技术团队

京东科技开发者

分布式事务 seata XA 企业号10月PK榜

EazyDraw for mac(矢量图绘制软件) 11.2.0中文直装版

mac

苹果mac Windows软件 矢量绘图软件 EazyDraw

中企全球化案例-能源业:“1+2+3+N”,建设全球领先的智慧司库平台

用友BIP

全球司库 中企出海

深入理解java和dubbo的SPI机制 | 京东物流技术团队

京东科技开发者

Java spi Dubbo SPI 企业号10月PK榜

Spring AOP 中被代理的对象一定是单例吗?

江南一点雨

Java spring

材质、纹理、贴图的区别和关联

3D建模设计

材质 纹理 贴图

软件测试/测试开发丨AI大模型应用开发实训营,文末领学习资料

测试人

人工智能 大数据 程序员 软件测试

🔥🔥🔥 计算机视觉 GPT-4V 它来了!

石头爱分享

VQA openai AIGC GPT MidJourney

微软首款AI芯片代号“雅典娜”;马斯克四年内将让“星舰”上火星丨 RTE 开发者日报 Vol.61

声网

身为产品经理该如何向客户推广API商品数据接口

Noah

API接口文档 API 安全 API 接口

七张图解锁Mybatis整体脉络,让你轻松拿捏面试官

小小怪下士

Java 程序员 mybatis

Rails综合报道:Rails 2.2将会是线程安全的,Rails Edge支持ETags_Ruby_Werner Schuster_InfoQ精选文章