關於過濾器 鏈的非常酷的部分是,每個過濾器不會等待 爲以前的過濾器完成;它可以在生產過程中處理之前的過濾器的 輸出,類似於Unix流水線的 。 (從here)一個nginx工作進程是否同時處理兩個請求或逐個處理兩個請求?
我想上述在每個過濾器的端部談到這樣的代碼:
if (!chain_contains_last_buffer)
return ngx_http_next_body_filter(r, in);
即,nginx的鏈濾波器逐個。 但是,因爲它的在每個過濾器的末尾,它必須等到當前的過濾器完成。我看不出nginx如何設法制作each filter doesn't wait for the previous filter to finish
。
所以上面是關於nginx的過濾器的併發性,其次是關於nginx的請求處理併發:
正如我們所知道的nginx使用epoll
處理請求:
events = epoll_wait(ep, event_list, (int) nevents, timer);
for (i = 0; i < events; i++) {
...
rev->handler(rev);
}
有了這樣的代碼上面,我不認爲nginx可以同時處理兩個請求,它只能一個接一個地完成(每個handler
完成它的工作足夠快,以便下一個請求很快得到處理),對吧?
或者是否有任何遺失的遺漏?
你是對的。 Nginx無法在一名工作人員中同時處理兩個或更多的請求。 – CyberDem0n 2011-06-15 08:05:24
@ CyberDem0n,過濾器流水線的事情呢?從理論上講,我認爲在沒有線程的情況下,在單個進程中是不可能的。 – cpuer 2011-06-15 08:13:33