Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
ngx.print('Hello ngx_lua/'..ngx.config.ngx_lua_version..' world!')
Nginx::rputs "Hello #{Nginx::module_name}/#{Nginx::module_version} world!"
local function fib(n)
return n < 2 and n or fib(n-2) + fib(n-1)
end
ngx.print(fib(39))
def fib n
return n if n < 2
fib(n-2) + fib(n-1)
end
puts fib(39)
-c 20 -t 30S
mruby — 7 hits — 0.24 trans/sec
lua — 51 hits — 1.72 trans/sec
-c 10 -t 60S
mruby — 10 hits — 0.17 trans/sec
lua — 163 hits — 2.76 trans/sec
$ time ./mruby fi.rb
63245986
real 0m16.064s
user 0m15.769s
sys 0m0.028s
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
$ time lua fi.lua
63245986
real 0m10.548s
user 0m10.325s
sys 0m0.020s
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-linux]
$ time ruby fi.rb
63245986
real 0m12.904s
user 0m12.525s
sys 0m0.036s
$ time ./mruby -b fi.mrb
63245986
real 0m15.483s
user 0m15.185s
sys 0m0.016s
$ time ruby /tmp/fib.rb
63245986
real 0m9.331s
user 0m9.322s
sys 0m0.011s
$ time /tmp/nl/mruby/bin/mruby /tmp/fib.rb
63245986
real 0m11.551s
user 0m11.507s
sys 0m0.008s
$ time luajit /tmp/fib.lua
63245986
real 0m0.884s
user 0m0.884s
sys 0m0.001s
local f = io.open('/dev/zero', 'rb')
for i = 1, 1000 do
ngx.print(f:read(4096))
end
f:close()
f = File.open('/dev/zero', 'rb')
for i in 1..1000
Nginx::rputs f.read(4096)
end
f.close
chunk 4096 lua - 3065 hits - 105.54 trans/sec mruby - 785 hits - 26.52 trans/sec chunk 1024 lua - 7645 hits - 262.99 trans/sec mruby - 3305 hits - 112.61 trans/sec
ctx = ngx_http_get_module_ctx(r, ngx_http_mruby_module);
if (ctx == NULL) {
ngx_log_error(NGX_LOG_ERR
, r->connection->log
, 0
, "get mruby context failed."
);
}
if (ctx->rputs_chain == NULL) {
chain = ngx_pcalloc(r->pool, sizeof(ngx_mrb_rputs_chain_list_t));
chain->out = ngx_alloc_chain_link(r->pool);
chain->last = &chain->out;
}
Интеграция Ruby в Nginx