Php 阻塞方法,如fcntl()和accept(),哪个请求者将获得它?
我正在阅读php cgi的源代码,看到分叉子进程正在使用fcntl(fd,F_SETLKW,&lock)等待套接字fd的锁,然后执行accept() 因此,我的问题是:Php 阻塞方法,如fcntl()和accept(),哪个请求者将获得它?,php,linux,nginx,Php,Linux,Nginx,我正在阅读php cgi的源代码,看到分叉子进程正在使用fcntl(fd,F_SETLKW,&lock)等待套接字fd的锁,然后执行accept() 因此,我的问题是: 当多个进程/线程试图用fcntl()锁定一个文件时,哪个进程/线程将获得该文件 如果多个进程都在同一个套接字fd中执行accept()(它们可以,对吗?),那么哪个进程将获得它 同样,在nginx源代码中,我看到forked进程正在同一个套接字fd上设置epoll事件,当一个事件出现时,哪一个会得到它 随机的?循环赛?先进先出?
实际上,我只是想找出这些模型的负载平衡策略。正如我在UNIX网络编程第1卷中所读到的,内核有助于均衡地负载平衡事件。但是内核是如何做到这一点的我不知道,希望有人能澄清它,并引用一些代码。将来我也会阅读源代码,也许我能自己找到答案
FCGI_LOCK(req->listen_socket);
req->fd = accept(listen_socket, (struct sockaddr *)&sa, &len);
FCGI_UNLOCK(req->listen_socket);