繁体   English   中英

多线程Web服务器与单线程

[英]Multi threaded webserver vs single threaded

我们有一个简单的内部使用的Web服务器,只有一个职责:监听请求,读取它们,并将数据推送到数据库中。 db和webserver都位于同一台机器上。 db是一个mysql-db,服务器是一个运行单线程的python webserver( BaseHTTPServer.HTTPServer )。

问题是无法同时处理两个请求。 问题是,是否有助于使网络服务器多线程(使用django,cheryypy,..)? 直观地说,Web服务器只执行CPU消耗任务,因此将其更改为多线程应该没有帮助。 它是否正确?

当您想要一次处理多个请求时,拥有多个线程或进程确实可以帮助您(实际上它需要实际操作)。

这并不意味着将更快地处理这两个请求。 拥有一个进程或线程池对于Web服务器性能非常有用,但在这种情况下这并不是很明显(除非你有多个内核)。 但MySQL同时处理两个请求没有问题,所以如果你的网络服务器也可以这样做,那么你就摆脱了处理一个请求的问题。

但是,如果值得努力开始使用这样的服务器,你只能回答。 :) Django无论如何都肯定是矫枉过正的,看看一些小的WSGI服务器。

步骤1.使用Apache。 它可能看起来有点矫枉过正,但它是便宜的多线程,您无需编程。 Apache可以配置为分叉多个服务器。 你没有编程。

这可能足以使您的应用程序同时运行。

步骤2.重写您的应用程序以使用wsgi框架并将其嵌入到wsgiref服务器中。 这不会有太大变化,但这是你应该总是编写小型Web应用程序的方式。

第3步。在Apache中使用mod_wsgi。 它允许您拥有应用程序的一个或多个后台守护程序版本。 没有额外的编程,您可以获得一堆并发性。

重要的经验教训。 始终使用WSGI。

如果Web服务器是单线程的并且DB请求是同步的(意味着在处理DB请求时Web服务器被阻止),那么使其成为多线程将有所帮助。

这将使您能够同时处理多个请求。 您的数据库引擎可能非常擅长。 但是,现在您不会让它同时为多个请求提供服务,因为您的Web服务器就位于其前面,一次只能为其提供一个请求。

我的直觉说你是对的,但它也说使用Django或Cherrypy是过度杀戮,即使你确实想让它多线程化。

我认为你是对的,因为如果网络服务器除了工作数据库之外真的没有做任何事情,那么除了启动响应之外,任何其他线程都无法做任何事情。 客户端将愉快地等待另一个请求完成所需的十到一百毫秒,然后服务器将能够立即accept()

您应该使用多线程或异步Web服务器,否则会阻止每个请求。 Django是一个Web框架,您可能必须查找可以在当前设置中透明替换的脚本,并且仍然拥有纯python多线程Web服务器。 否则扭曲也是一个很好的解决方案。 AFA我可以看到,您可能不需要Web框架,因为您没有使用模板驱动的MVC样式应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM