2013-03-03 21 views
0

我正在閱讀php-cgi的源代碼,並看到分叉子進程正在使用fcntl(fd,F_SETLKW,&鎖)等待套接字fd的鎖定,然後執行accept()。阻止方法與fcntl()和accept()一樣,請求者中的哪一個會得到它?

FCGI_LOCK(req->listen_socket); 
req->fd = accept(listen_socket, (struct sockaddr *)&sa, &len); 
FCGI_UNLOCK(req->listen_socket); 

所以我的問題是:

  1. 當幾個進程/線程試圖用鎖的fcntl()的文件,其中一個會怎麼做呢?

  2. 如果幾個進程都從同一個套接字fd做accept()(他們可以,對嗎?),哪一個會得到它?

  3. 同樣,在nginx源代碼中,我看到分叉進程在同一個套接字fd上設置epoll事件,當事件發生時,哪一個會得到它?

random?循環賽? FIFO? LRU? ...

其實我只是想弄清楚這些模型的負載均衡策略。

回答

0

當我在UNIX網絡編程第一卷上閱讀時,它是幫助均衡地平衡事件負載平衡的內核。但是內核是如何超越我的,希望有人能夠澄清它並引用一些代碼。此外,我將在未來閱讀源代碼,也許我可以自己找到答案。