puma(5300✨) Rails的一个多线程,高并发处理的web server
在开发和产品环境下,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。推荐把你的连接池放到这个块中,见
puma(5300✨) Rails的一个多线程,高并发处理的web server的更多相关文章
- Java 多线程高并发编程 笔记(一)
本篇文章主要是总结Java多线程/高并发编程的知识点,由浅入深,仅作自己的学习笔记,部分侵删. 一 . 基础知识点 1. 进程于线程的概念 2.线程创建的两种方式 注:public void run( ...
- 再谈C#采集,一个绕过高强度安全验证的采集方案?方案很Low,慎入
说起采集,其实我是个外行,以前拔过阿里巴巴的客户数据,在我博客的文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子) 中,介绍过采集用的工具,其实很Low的,分析 ...
- python_way ,day11 线程,怎么写一个多线程?,队列,生产者消费者模型,线程锁,缓存(memcache,redis)
python11 1.多线程原理 2.怎么写一个多线程? 3.队列 4.生产者消费者模型 5.线程锁 6.缓存 memcache redis 多线程原理 def f1(arg) print(arg) ...
- ExecutorService 建立一个多线程的线程池的步骤
ExecutorService 建立一个多线程的线程池的步骤: 线程池的作用: 线程池功能是限制在系统中运行的线程数. 依据系统的环境情况,能够自己主动或手动设置线程数量.达到执行的最佳效果:少了浪费 ...
- Java多线程高并发学习笔记(一)——Thread&Runnable
进程与线程 首先来看百度百科关于进程的介绍: 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动.它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体.它不只是程序的代码,还包括当前的 ...
- java web开发 高并发处理
转自:http://blog.csdn.net/zhangzeyuaaa/article/details/44542161 java处理高并发高负载类网站中数据库的设计方法(java教程,java处理 ...
- Windows服务器高并发处理IOCP(完成端口)详细说明
一. 完成端口的优点 1. 我想只要是写过或者想要写C/S模式网络服务器端的朋友,都应该或多或少的听过完成端口的大名吧,完成端口会充分利用Windows内核来进行I/O的调度,是用于C/S通信模式中性 ...
- akka框架——异步非阻塞高并发处理框架
akka actor, akka cluster akka是一系列框架,包括akka-actor, akka-remote, akka-cluster, akka-stream等,分别具有高并发处理模 ...
- 多线程高并发编程(3) -- ReentrantLock源码分析AQS
背景: AbstractQueuedSynchronizer(AQS) public abstract class AbstractQueuedSynchronizer extends Abstrac ...
随机推荐
- Linux使用scp命令实现文件的上传和下载
上传本地/data/project/test.zip 文件至远程服务器192.168.1.2的 /root 目录下,代码如下: scp /home/project/test.zip root@192 ...
- jetBrains设置appium环境
- Druid出现DruidDataSource - recyle error - recyle error java.lang.InterruptedException: null异常排查与解决
一.问题回顾 线上的代码之前运行的都很平稳,突然就出现了一个很奇怪的问题,看错误信息是第三方框架Druid报出来了,连接池回收连接时出现的问题. 2018-05-14 20:01:32.810 ERR ...
- Java应用开发中的SQL注入攻击
1. 什么是SQL注入攻击? SQL注入攻击是黑客对数据库进行攻击的常用手段之一.随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员越来越多.但是由于程序员的水平及经验参差不齐,相当一部分 ...
- C++之旅:拷贝构造与友元
拷贝构造与友元 拷贝构造是在构造一个对象的时候将已有对象的属性拷贝给新的对象:友元可以让一个类的所有属性(主要是private)对特定的类开放 拷贝构造 如果没有复写拷贝构造函数,系统会帮我们默认生成 ...
- Web服务器实现文件传输程序设计
总体概括来说就是设计一个Web服务器的流程,将执行流程分为简单的步骤,每个步骤作为一个模块来实现. 1.整体设计 服务器程序发送文件给客户端或者从客户端接收文件,每次通信只能做一次文件传输,传输完毕后 ...
- JqGrid 隐藏水平滚动条完美解决方案
我有强迫症,网上找的几个看着就不舒服 不用更改样式表,隐藏最右侧的边框. .ui-jqgrid .ui-jqgrid-bdiv{ overflow-x: hidden; } 不用通过js控制加1px ...
- 负载均衡技术在CDN中发挥着重要作用
转载地址:http://www.qicaispace.com/gonggao/server/page01/info07.asp CDN是一个经策略性部署的整体系统,能够帮助用户解决分布式存储.负载均衡 ...
- Web安全学习笔记之Nmap命令参考指南
最近研究Nmap,命令太多,详细还是需要参考官方文档(可选中文) 本文转载 在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型.物理端口指的是物理存在的端口,如ADSL Modem.集线器. ...
- 刷新DNS解析缓存
为了提高网站的访问速度,系统会在成功访问某网站后将该网站的域名.IP地址信息缓存到本地.下次访问该域名时直接通过IP进行访问. 一些网站的域名没有变化,但IP地址发生变化,有可能因本地的DNS缓存没有 ...