在开发和产品环境下,Puma是一个简单,快速,多线程,并高并发highly concurrent HTTP1.1server for Ruby/Rack程序。
什么是多线程? multithreading
指从软件或者硬件上实现多个线程并发执行的技术。从而整体提升处理效能。
软件多线程:即使处理器只能运行一个线程,但操作系统可以通过快速在不同线程之间进行切换,由于间隔时间很小,给用户造成一种多个线程同时运行的假象。这样的程序运行机制被称为软件多线程。
多任务可以由多进程完成,也可以由一个进程内的多线程完成。
进程是由若干线程组成的,一个进程至少有一个线程。
单进程单线程:一个人在一个桌子上吃菜;
单进程多线程:多个人在一个桌子上吃菜;容易发生争抢,即资源共享就会发生冲突争抢。
多进程单线程:多个人在各自的桌子上吃菜;
gem 'puma', '~> 3.11'
gem 'mina-puma', '~> 1.1.0', require: false
⚠️require: false的选项是什么用途?
把这个gem安装了,但不加载load。 你bundler时,不会调用require 'mina-puma'命令。什么时候需要用到这个library,手动加载这个命令。
一般是不希望这个gem加载到所有进程中,只在特定的时候使用。可以节省主程序的内存和减少startup 时间。
Rails
Puma是Rails的默认server,已经安装在gemfile中了。
使用rails s会开启你的服务器:
但是用rails s不能进行额外的options的配置,可以使用$ bundle exec puma 代替 :
具体配置选择看puma -h ,详细讲解见git
部分讲解见下:
Configuration
所有配置可以在config/puma.rb中设置。
例子,如果环境是产品环境则:配置如下信息:
Thread Pool
Puma 使用一个线程池子。你可以设置这个池子最小和最大的线程数。-t 或者 --threads标记。
默认是0:16 。例子: $puma -t 8:32
Clustered mode
Puma提供clustered mode. Clustered mode会fork workers 从一个主进程。 每个子进程仍有它自己的thread pool。 你可以调节workers的数量,使用-w或者--workers标记。
一个worker就是一个进程。设置workers的数量就是开几个进程。
--preload标记
在配置文件puma.rb中设置preload_app!方法。
on_worker_boot 块
在配置文件puma.rb中设置这个块会在boot每个worker时运行块中的代码。
作用是在boot这个程序前,用于建立这个进程,让你可以做一些Puma-specific的事情(不想插入到程序中的事),例如去掉一些worker启动时或发送信息的日志信息。这个块可以多次调用。
如果你预加载 你的程序并使用ActiveRecord。推荐把你的连接池放到这个块中,见👆的代码实例。
before_fork块
用于在workers被fork前运行一些代码。见👆示例。
还有很多额外配置,现用现学把。
来源:oschina
链接:https://my.oschina.net/u/4388710/blog/3923534