转述一些 Puma 相关

最近内部项目由 Unicorn 转向 Puma,刚好手里有一本书,有一章讲到了 Puma
首先简单介绍一下:(转述)

Puma rubygem 提供了一个“专注于并发的 Ruby Web 服务器”。Puma 被设计作为由 Ruby 实现的王牌 HTTP 服务器,由于它大量倚重线程,所以并没有使用 GIL(Rubinius 或 JRuby)。Puma 的自述文件对于其适用场景给出了很好的概述,并提及了 GIL 对于线程化的影响。

1. http://puma.io/
2. https://github.com/puma/puma#description

那么 Puma 是如何实现并发的呢?(转述)

在高层上,Puma 利用线程池提供并发。主线程一直用于 accept 新的连接,然后将连接加入线程池待作处理。这便是不适用 keep-alive 的 HTTP 连接的处理方法。不过 Puma 也支持 HTTP 的 keep-alive。在处理连接时,如果首个请求要求连接保持活跃状态,那么 Puma 会尊重这一请求,不关闭连接。

3. https://en.wikipedia.org/wiki/HTTP_persistent_connection

不过这时 Puma 就不再只是 accept 这个连接了。它需要监视该连接上的新请求并进行处理。这是通过事件驱动类型的 reactor 实现的。当新的请求出现并处于保持活跃状态的连接上时,该请求会被再次加入线程池进行处理。
Puma 的请求处理总是由线程池完成的。它通过一个能够监视所有持久连接的 Reactor 实现。

最后我在此简单介绍一下 Reactor,是一种并发和联网对象模式,再具体一点是事件处理模式或者说事件驱动模式,相对简单也不算什么新技术,但风头正劲。它也是 EventMachineTwistedNode.js 以及 Nginx 等库的核心所在。事件驱动应用程序使用 Reactor 架构模式来分离并分派从一个或多个客户端发送到应用程序的服务请求,别名: DispatcherNotifier,一看别名谁都懂了!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文是Netty文集中“Netty 那些事儿”系列的文章。主要结合在开发实战中,我们遇到的一些“奇奇怪怪”的问题,...
    tomas家的小拨浪鼓阅读 15,592评论 3 35
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 前奏 https://tech.meituan.com/2016/11/04/nio.html 综述 netty通...
    jiangmo阅读 5,900评论 0 13
  • 对胆小的蚊子:取几只蚊子,凌迟处死后悬挂于蚊子经常出没的地方,这样可以吓退一批胆小的蚊子。 对未婚的蚊子:优选几只...
    谢皎然阅读 518评论 0 1
  • 材料通过一系列不太严谨的论证,提出只要正确判断股价的高低,以及掌握了股价涨跌的概率即可盈利。看似有理,实则存在...
    一万口鲜柠C阅读 949评论 0 1