Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 阻塞方法,如fcntl()和accept(),哪个请求者将获得它?_Php_Linux_Nginx - Fatal编程技术网

Php 阻塞方法,如fcntl()和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事件,当一个事件出现时,哪一个会得到它 随机的?循环赛?先进先出?

我正在阅读php cgi的源代码,看到分叉子进程正在使用fcntl(fd,F_SETLKW,&lock)等待套接字fd的锁,然后执行accept()

因此,我的问题是:

  • 当多个进程/线程试图用fcntl()锁定一个文件时,哪个进程/线程将获得该文件

  • 如果多个进程都在同一个套接字fd中执行accept()(它们可以,对吗?),那么哪个进程将获得它

  • 同样,在nginx源代码中,我看到forked进程正在同一个套接字fd上设置epoll事件,当一个事件出现时,哪一个会得到它

  • 随机的?循环赛?先进先出?lru


    实际上,我只是想找出这些模型的负载平衡策略。

    正如我在UNIX网络编程第1卷中所读到的,内核有助于均衡地负载平衡事件。但是内核是如何做到这一点的我不知道,希望有人能澄清它,并引用一些代码。将来我也会阅读源代码,也许我能自己找到答案

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