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);
所以我的問題是:
當幾個進程/線程試圖用鎖的fcntl()的文件,其中一個會怎麼做呢?
如果幾個進程都從同一個套接字fd做accept()(他們可以,對嗎?),哪一個會得到它?
同樣,在nginx源代碼中,我看到分叉進程在同一個套接字fd上設置epoll事件,當事件發生時,哪一個會得到它?
random?循環賽? FIFO? LRU? ...
其實我只是想弄清楚這些模型的負載均衡策略。