新手问题 Rails 并发疑问

abellong · 发布于 2014年12月11日 · 最后由 hhuai 回复于 2014年12月11日 · 1617 次阅读
96

关于rails并发,我所知道的一些知识:

  1. 平常开发应用时,运行 rails console 命令,使用了WEBrick服务器,它是纯ruby写的,一次只能处理一个请求
  2. 生产环境下,比如使用 Apache(或Nginx)+Passenger,Apache负责接受http请求,转给Passenger处理,Passenger开ruby进程进行实际处理。我后台查看过,对于一个app,貌似就开了两个ruby进程,多个设备多个浏览器独立访问,ruby进程号和进程数量都没变化。

疑问:

  1. 是不是两个ruby进程意味着同时只能处理两个请求?
  2. 如果两个请求要同时写同一个数据库的同一张表,会怎样? 我遇到的例子:给某张表所有记录编一个号码(从0开始依次增大),如果中间某条记录删除,后续所有的记录编号都要减1,两个用户同时做删除操作,会冲突吧?我猜测是对数据库的访问是一次只能处理一个请求,但不知道怎么验证;我们在开发rails应用时似乎不用考虑这样的问题,这种“协调”工作是交给谁来做的呢?
  3. 怎样评估某个应用使用Apache+Passenger部署在普通的vps上,能同时支持多少人并发访问?需要考虑哪些因素?有没有方法测试?
共收到 4 条回复
4375
  1. 不是,进程之上可以使用多线程或者多路复用实现并发。rails 4.0 后支持多线程之后,多进程更多是为了绕过gil实现smp。
  2. 数据库基础,去了解一下悲观锁
  3. 最简单的ab,siege
115

#1楼 @saiga 在用你做的主题 😃

96

WEBrick也采用了多线程,经典的一来连接开一个线程那种

connect select { Thread process }

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