Linux 下进程和线程的选择问题


因为 Linux 对进程的处理异常高效,而线程则有时候会遇到诸如锁定(locking)之类的相关问题,所以通常在 Linux 下总是会去优先使用进程。

但当遇到进程和线程处理能力相当的情况时,比如我要写一个 web 服务器,该如何选择呢?

Linux 进程 线程

YYYAAA 10 years, 4 months ago

已有项目基本上都是一 CPU 一进程(管理进程除外)。如:

  • Nginx
  • Celery
  • Apache httpd prefork mode
  • PostgreSQL (这个是按工种和请求分的)
  • Tornado
  • Postfix (这个也是按工种分的)

多进程写起来比多线程方便不容易出错又能充分利用 CPU。特别是高级语言如 Python 有全局解释器锁的。

kactus answered 10 years, 4 months ago


 异步 IO

yanxiao answered 10 years, 4 months ago

多进程服务器的一个重要优势是如果某个处理单元遇到问题崩溃了(比如SIGSEV),那也只是一个进程崩溃了而已,其他提供服务的进程还都在。

但是如果是用线程的话,一个线程挂了,所有的在同一个进程内的线程就都跪了。

不过这只是一个参考因素而已,具体是用线程还是进程,还得看你所要做的服务器的具体的模型,才能真正下定论。

長門大萌神 answered 10 years, 4 months ago

Your Answer