Heim  >  Artikel  >  Backend-Entwicklung  >  问个有关问题哟 不知道如何标题应该如何取

问个有关问题哟 不知道如何标题应该如何取

WBOY
WBOYOriginal
2016-06-13 11:15:12788Durchsuche

问个问题哟 不知道怎么标题应该怎么取
就当时标题党吧

服务器上有一个php 文件  比如是1.php

当别人请求这个文件的时候
这个文件就会被执行  然后返回给客户端执行后的东西



我的问题是
当a客户访问的时候1.php的时候  这是服务器还没有执行完,
突然后b客户也来访问了 这是1.php是等返回了a的请求在执行b的请求了,还是可以同时执行b的请求

   


------解决方案--------------------
同时执行b的请求
------解决方案--------------------
其实这涉及到网络模型的问题了。
你知道为什么现在都推崇nginx来取代apache,为什么nginx处理并发问题比apache要强很多吗?

因为apache采用的是linux旧版本内核的select模型,而nginx采用的是2.6+版本的epool模型。

回到具体你说的这个问题上,如果b客户来访问时,服务器等待a客户的处理结果再接受b的请求,这就是select模型的工作方式。从接收到请求后之后,同一个进程会一直follow这整个握手过程,知道response结束。这种模型也很容易遭到ddos攻击。

而epool模型,是异步的。服务器接收到一个请求后,由一个主进程负责把任务合理分工开,有个负责分发任务的线程只负责分发任务,剩余的事情委托给其他线程去处理,其他线程处理完毕后,会callback一下主进程可以response了,然后返回给相应客户端。这样的工作方式,每个请求都不会相互阻塞。

不过这样解释后,你可能会不明白,难道说apache就没法处理并发任务了?一个请求阻塞了,其他的请求都进不来了?当然不是,apache worker模式下会开n个进程,所谓的阻塞,也只会阻塞住一个进程。但select模型的这种工作方式确实效率很低。

这部分知识,你可以去参考libevent
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn