$host = '127.0.0.1';$port = 8888;$key = 'group:32149904:binding';$redis = new redis();$redis->pconnect($host, $port);$obj = $redis->get($key);echo $obj, php_eol;
php代码就是以上这样,然后我strace了一下,结果如下
1565 connect(3, {sa_family=af_inet, sin_port=htons(6080), sin_addr=inet_addr(10.83.73.168)}, 16) = -1 einprogress (operation now in progress)1566 poll([{fd=3, events=pollin|pollout|pollerr|pollhup}], 1, 2000) = 1 ([{fd=3, revents=pollout}])1567 getsockopt(3, sol_socket, so_error, [0], [4]) = 01568 fcntl(3, f_setfl, o_rdwr) = 01569 setsockopt(3, sol_tcp, tcp_nodelay, [1], 4) = 01570 poll([{fd=3, events=pollin|pollpri|pollerr|pollhup}], 1, 0) = 0 (timeout)1571 sendto(3, *2\r\n$3\r\nget\r\n$22\r\ngroup:32149904..., 42, msg_dontwait, null, 0) = 421572 poll([{fd=3, events=pollin|pollpri|pollerr|pollhup}], 1, 0) = 0 (timeout)1573 poll([{fd=3, events=pollin|pollerr|pollhup}], 1, 2000) = 1 ([{fd=3, revents=pollin}])1574 recvfrom(3, $44\r\n{\allyid\:\60979\,\appid\:\..., 8192, msg_dontwait, null, null) = 511575 write(1, {\allyid\:\60979\,\appid\:\ex_mm..., 44) = 441576 write(1, \n, 1) = 11577 poll([{fd=3, events=pollin|pollpri|pollerr|pollhup}], 1, 0) = 0 (timeout)1578 setsockopt(3, sol_tcp, tcp_nodelay, [1], 4) = 01579 poll([{fd=3, events=pollin|pollpri|pollerr|pollhup}], 1, 0) = 0 (timeout)1580 sendto(3, *2\r\n$3\r\nget\r\n$22\r\ngroup:32149904..., 42, msg_dontwait, null, 0) = 421581 poll([{fd=3, events=pollin|pollpri|pollerr|pollhup}], 1, 0) = 0 (timeout)1582 poll([{fd=3, events=pollin|pollerr|pollhup}], 1, 2000) = 1 ([{fd=3, revents=pollin}])1583 recvfrom(3, $44\r\n{\allyid\:\60979\,\appid\:\..., 8192, msg_dontwait, null, null) = 511584 write(1, {\allyid\:\60979\,\appid\:\ex_mm..., 44) = 441585 write(1, \n, 1) = 1
在1572行,发送完get命令后,就调用了poll,timeout传递的是0,1573行再次调用poll,timeout变成了2000。
请问,为什么要调用两次poll呢?只调用一次可以吗?
回复内容: $host = '127.0.0.1';$port = 8888;$key = 'group:32149904:binding';$redis = new redis();$redis->pconnect($host, $port);$obj = $redis->get($key);echo $obj, php_eol;
php代码就是以上这样,然后我strace了一下,结果如下
1565 connect(3, {sa_family=af_inet, sin_port=htons(6080), sin_addr=inet_addr(10.83.73.168)}, 16) = -1 einprogress (operation now in progress)1566 poll([{fd=3, events=pollin|pollout|pollerr|pollhup}], 1, 2000) = 1 ([{fd=3, revents=pollout}])1567 getsockopt(3, sol_socket, so_error, [0], [4]) = 01568 fcntl(3, f_setfl, o_rdwr) = 01569 setsockopt(3, sol_tcp, tcp_nodelay, [1], 4) = 01570 poll([{fd=3, events=pollin|pollpri|pollerr|pollhup}], 1, 0) = 0 (timeout)1571 sendto(3, *2\r\n$3\r\nget\r\n$22\r\ngroup:32149904..., 42, msg_dontwait, null, 0) = 421572 poll([{fd=3, events=pollin|pollpri|pollerr|pollhup}], 1, 0) = 0 (timeout)1573 poll([{fd=3, events=pollin|pollerr|pollhup}], 1, 2000) = 1 ([{fd=3, revents=pollin}])1574 recvfrom(3, $44\r\n{\allyid\:\60979\,\appid\:\..., 8192, msg_dontwait, null, null) = 511575 write(1, {\allyid\:\60979\,\appid\:\ex_mm..., 44) = 441576 write(1, \n, 1) = 11577 poll([{fd=3, events=pollin|pollpri|pollerr|pollhup}], 1, 0) = 0 (timeout)1578 setsockopt(3, sol_tcp, tcp_nodelay, [1], 4) = 01579 poll([{fd=3, events=pollin|pollpri|pollerr|pollhup}], 1, 0) = 0 (timeout)1580 sendto(3, *2\r\n$3\r\nget\r\n$22\r\ngroup:32149904..., 42, msg_dontwait, null, 0) = 421581 poll([{fd=3, events=pollin|pollpri|pollerr|pollhup}], 1, 0) = 0 (timeout)1582 poll([{fd=3, events=pollin|pollerr|pollhup}], 1, 2000) = 1 ([{fd=3, revents=pollin}])1583 recvfrom(3, $44\r\n{\allyid\:\60979\,\appid\:\..., 8192, msg_dontwait, null, null) = 511584 write(1, {\allyid\:\60979\,\appid\:\ex_mm..., 44) = 441585 write(1, \n, 1) = 1
在1572行,发送完get命令后,就调用了poll,timeout传递的是0,1573行再次调用poll,timeout变成了2000。
请问,为什么要调用两次poll呢?只调用一次可以吗?