我是一个新手,如果有什么说错的,请大家多多包涵。也希望大家解答下我的疑问,满足我这个小小的好奇心。。。
我的疑问是,我测试的时候打开了 活动监视器 查看mysqld的线程情况,使用php连接mysql的测试,只有16个线程操作,CPU使用率在10%~12%之间,而使用lua_resty_mysql 100个poll线程操作,CPU占有率是10%~13%之间。。。CPU使用效率差不多,但是如果用成功数除以线程数,php的线程似乎更高效。。。我怎么觉得有点毁三观的感觉。。。。
测试情况如下:
原生php连接mysql的测试情况
$ webbench -c 500 -t 30 http://localhost/mysql_test.php
Speed=17566 pages/min, 135435 bytes/sec.
Requests: 6327 susceed, 2456 failed.
测试脚本
$con = mysql_connect('127.0.0.1','root','');
mysql_select_db('aicaike_test', $con);
$result = mysql_query('SELECT * FROM `user` WHERE `id`=555555', $con);
print_r(mysql_fetch_array($result, MYSQL_ASSOC));
用lua_resty_mysql的测试情况
$ webbench -c 500 -t 30 http://localhost/api/users?userid=555555
Speed=36100 pages/min, 306836 bytes/sec.
Requests: 14979 susceed, 3071 failed.
location /api/users
{
content_by_lua '
local mysql = require "resty.mysql"
local db,err = mysql:new()
if not db then
ngx.say("get mysql instance false")
return
end
db:set_timeout(1000)
local ok, err = db:connect{
host = "127.0.0.1",
port = 3306,
database = "aicaike_test",
user = "root",
password = "" }
if not ok then
ngx.say("connect error:",err)
return
end
local sql = "";
if ngx.var.arg_userid then
sql = "SELECT * FROM user WHERE id = " .. tonumber(ngx.var.arg_userid)
else
sql = "SELECT * FROM user LIMIT 30"
end
local res, err = db:query(sql);
if not res then
ngx.say("query error: ", err)
return
end
local cjson = require "cjson"
ngx.say(cjson.encode(res))
local ok, err = db:set_keepalive(0, 100)
if not ok then
ngx.say("failed to set keepalive: ", err)
return
end
';
}