Ben select () yöntemini kullanarak basit bir TCP sunucusu uyguluyorsanız am - her şey gayet iyi ve performansı oldukça kabul edilebilir, ama ab (apachebench) ile kıyaslama yaparken "uzun isteği" ortalama zamanlara göre delicesine yüksek:
Ben kullanıyorum: ab -n 5000 -c 20 http://localhost:8000/ code>
pasajı:
Requests per second: 4262.49 [#/sec] (mean)
Time per request: 4.692 [ms] (mean)
Time per request: 0.235 [ms] (mean, across all concurrent requests)
Percentage of the requests served within a certain time (ms)
50% 2
66% 2
75% 2
80% 2
90% 2
95% 3
98% 3
99% 4
100% 203 (longest request)
ve apache karşı aynı:
Requests per second: 5452.66 [#/sec] (mean)
Time per request: 1.834 [ms] (mean)
Time per request: 0.183 [ms] (mean, across all concurrent requests)
Percentage of the requests served within a certain time (ms)
50% 1
66% 2
75% 2
80% 2
90% 3
95% 3
98% 4
99% 4
100% 8 (longest request)
Başvuru için, i stream_socket_recvfrom kullanıyorum ve prizler olmayan engelleme vardır.
Is this a common effect of using the select() call?
Are there any kinds of performance considerations i should worry about?
Update:
Bir eşzamanlılık değeri <= 6 kullanırken, uzun isteği (yaklaşık 2x veya ortalama 3x) "normal" olduğunu, ancak 6 yukarıdaki şey sadece (örneğin, 7 eşzamanlı istekleri 20 veya etrafında 200ms gibi aynı kriter olabilir delirir .)
Update2:
Eşdeğer soket fonksiyonları ve bazı uygun test / kıyaslama ile akım fonksiyonları değiştirdikten sonra, sorun artık ortaya - bu yüzden dere PHP uygulanmasına ilişkin bazı karanlık ayrıntı için bu davranışı bağlar.