如果我正在编写HTTP服务器,我为什么要考虑在自己的线程中处理每个HTTP连接?
我已经阅读了很多论据,即事件驱动的HTTP服务器比线程驱动的HTTP服务器更快,更具可伸缩性。 (例如,请参阅Nginx上的Ars Technica)。然而,世界上最受欢迎的服务器Apache是线程驱动的。为什么?有什么好处?
答案 0 :(得分:2)
编码很简单。
基本上,如果没有语言支持(例如C#和VB将在他们的下一个版本中获得)和非常好的库,编写异步代码很难。并非不可能,毫无疑问,那些能够站在他们头上的人会发表评论,但这比同步版本更难。我们更好地考虑从上到下执行的代码,而不是必须重入的代码等。
根据您的平台,线程现在可以非常便宜 - 因此,通过适当的池化,每个请求的线程模型可以很好地运行 用于服务器#&# 39;一次需要处理 多个请求。当然,对于长时间轮询,或者主要需要将请求委托给其他服务的服务器来说,这可能需要花费很多时间。回来(即使那只是十分之一秒)。后一类服务器应能够处理巨大的请求率,因为他们只进行最少的处理来完成他们的工作 - 但是如果他们为每个请求占用一个线程只是在等待时阻塞另一个回来的服务,这可能非常浪费,尤其是记忆。