Date: Mon, 20 Sep 2010 08:19:37 -0400 From: Michael Powell <nightrecon@hotmail.com> To: freebsd-questions@freebsd.org Subject: Re: apache22 and threads Message-ID: <i77jch$cee$1@dough.gmane.org> References: <20100920060811.GA10084@admin.sibptus.tomsk.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
Victor Sudakov wrote: > Colleagues, > > When building apache22 from ports, would you recommend to enable or to > disable threads support? > > Even more confusing is the fact that for ports/www/apache22 the default > is: "Enable threads support in APR is off" (WITHOUT_THREADS=true) > > while for ports/devel/apr1 the default is: > "Enable Threads in apr is on" (WITH_THREADS=true). > > Thank you in advance for any input. > > PS ports/devel/apr1 will also be used for the subversion client. > I wouldn't mind someone with more apache22-fu to elaborate, correcting the following if necessary. My thoughts are this matters depending upon which mpm you choose to build into apache. The default is prefork, and it handles incoming requests by spawning child processes. The main shortcoming associated with this approach is resources such as database connections are not shareable between the child processes, e.g. each must have its own. So each incoming request has to fork a child, then build up, consume, and tear down the database connection. The lifetime will exist during the keepalive period and just be sitting there in memory idle most of the time following the task completion. A threaded mpm such as worker or event, is designed to spawn threads within a process to service incoming requests. One is a hybrid, in that it also forks additional processes as well when a preset thread count is reached. When all threads are contained within the same process each thread is able to share and consume resources in a pool amongst other threads. So an idle database connection which has finished serving a previous request can be immediately reused by a new thread without a build up tear down cycle. So my idea of the usage of WITH_THREADS is for the default prefork mpm it would be "NO", while for the event mpm it would be "YES". An additional consideration might be what kind of backend is used. For example, since not all of PHP is known to be thread safe it is not recommended for use with a threaded server and mod_php. The way to get around this situation is to separate PHP from Apache with something like mod_fcgid which runs PHP as a FastCGI. This way you can safely run a threaded Apache with non-thread safe PHP. As far as which is the better approach I still am not really sure. Each has its set of pros and cons. -Mike
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?i77jch$cee$1>