我想知道当Web服务器将自己描述为预分叉Web服务器时究竟意味着什么。我有一些例子,例如unicorn表示ruby,gunicorn表示python。
更具体地说,这些是问题:
另外,对于独角兽/炮手的更具体的问题:
让我们说我有一个我想用(g)独角兽运行的webapp。在初始化时,webapp将执行一些初始化操作(例如,填写其他数据库条目)。如果我用多个worker配置(g)unicorn,初始化的东西会多次运行吗?
答案 0 :(得分:76)
Pre-forking基本上意味着主人创建处理每个请求的分叉。 fork是一个完全独立的* nix进程。
根据以下评论进行更新。
pre
中的pre-fork
表示在请求进入之前这些进程是分叉的。但是,随着负载的上升和下降,它们通常会增加或减少。
当您拥有非线程安全的库时,可以使用预分叉。它还意味着请求中的问题导致问题只会影响它们处理的进程,而不会影响整个服务器。
多次运行的初始化都取决于您正在部署的内容。通常情况下,每个进程都会存在连接池和那种性质的东西。
在线程模型中,master会创建更轻量级的线程来分派请求。但是如果一个线程导致大量问题,它可能会对主进程产生影响。
使用Nginx,Apache 2.4的Event MPM或gevent(可与Gunicorn一起使用)等工具,这些都是异步的,这意味着一个进程可以处理数百个请求而不会阻塞。