Snusmumriken
С вкраплениями маршмэллоу.
Snusmumriken
Snusmumriken
*намайнил*
Lucky
Particle Booster
Подскажите пожалуйста, делаю так:
dices, sides, taskA, taskB = string.match("4d2|math.ceil(k/2)+1", "(%d+)d(%d+)|(.+)k(.+)")
print(dices, sides, taskA, taskB)
i = 4
z = tostring(taskA.. i + dices - 1 ..taskB)
x = loadstring("return ", z)
x = x()
print("=", x)
как заставить его решать стринг?
Particle Booster
о! точна)
Particle Booster
Спасибо, что помогли слепому)
Particle Booster
19:15:59.367 For: 2d6>((5/2)*(3/k)+1)
19:15:59.367
19:15:59.367 Mean: 2.694
19:15:59.367 Deviation: 0.700
19:15:59.367
19:15:59.367 Normal:
19:15:59.367 2 41.667%
19:15:59.367 3 50.000%
19:15:59.367 4 5.556%
19:15:59.367 5 2.778%
19:15:59.367
19:15:59.367 At Least:
19:15:59.367 2 41.667%
19:15:59.367 3 91.667%
19:15:59.367 4 97.222%
19:15:59.367 5 100.000%
19:15:59.367
19:15:59.367 At Most:
19:15:59.367 2 100.000%
19:15:59.367 3 58.333%
19:15:59.367 4 8.333%
19:15:59.367 5 2.778%
It works =)
bebebe
Кстати, я может задавал уже такой вопрос, кто-нибудь на практике использовал какие либо библиотеки фаззи серча?
Particle Booster
это точно)
Particle Booster
это корона выдает сама
Particle Booster
незнаю. Я использую свой, но не уверен, что это сильно лучше чем просто os.time. Тестировал немного, мне показалочь, что отличается результат
math.randomseed( modAssay.genSeed( ))
function modAssay.genSeed( )
local i, f = math.modf( os.clock( ))
local clock = tonumber( tostring( i - f ):sub( 7, 9 ))
if clock == nil then
clock = math.random( 1, 999 )
end
local time = tonumber( tostring( os.time( )):sub( 9 ))
return clock + time * math.random( 1, 99 )
end
Particle Booster
методом тыка пробовал разные сочетания =)
Particle Booster
ща гляну
Particle Booster
в короне нет своего
Tverd
https://github.com/linux-man/randomlua
Roman
Привет!
Не знаю зачем и почему захотелось это сделать, но есть один бенчмарк с кучей разного всякого, и луа там приуныла по позиции, и захотелось её приподнять
И такая любопытная вещь: подключение к базе postgtres и mysql
local time = gettime()
for i = 1, 1000 do
local sock = tcp()
sock:connect('127.0.0.1', '5432')
sock:send(auth_data)
sock:receive(1)
sock:close()
end
print(gettime() - time)
Для postgres и ровно то же самое с другой строкой auth_data и портом для mysql
В mysql идет больше данных, но почему-то подключение к myqsl почти в 200 раз быстрее!
Как так? Что делать?
Tverd
Привет, Рома!
Tverd
бесполезный бенч... Имхо
Anonymous
само подключение или обмен данными?
Anonymous
обмена же не идет
Roman
имено подключение чтобы подключиться к базе под логином, и это занимает больше времени чем обмен
Tverd
А так - разные клиенты под постгрес и мускул, вот и разница. Оп, тупанул. Внутри авторизация разная в самих серверах
Anonymous
можно на родном постгрес клиенте проверить
Anonymous
если будешь вечером в сети
Anonymous
кинь мне линку на рабочий постгрес
Anonymous
я с сишной либы аутентифицируюсь
Tverd
Вообще мускул быстрее постгреса на простых вещах, но на тяжелых - проблема, и тут постгрес на коне. Что касается коннекта, лично на мой взгляд проблема скорее всего в авторизации, если смотреть на данный бенч
Anonymous
у меня просто постгреса нет на виртуалке
Tverd
в итоге - не луа проблема )
Tverd
что можно сделать - не рубить коннект, это плохая практика, а заюзать корутины и держать 10 (к примеру) открытых коннектов
Anonymous
коннект пул обычный подойдет тоже)
Anonymous
который на тредах
Tverd
ага, норм вариант
Roman
Ну и да, это все во nginx в openresty, получается один коннект на одного юзера, которых может быть очень много
Anonymous
а с консольки значит в 200 раз медленнее?
Anonymous
или ты прям в опенрести замерял?
Roman
Прямо в опенрести ngx.socket.tcp и отдельно require('socket').tcp - цифры такие же
Anonymous
а о каких порядках идет речь?
Anonymous
милисекунды против секунд?
Anonymous
просто вполне возможно, что постгрес аутентификация занимает например 500мс а мускл 2
Anonymous
тогда это было бы нормально
Anonymous
а вообще , мне кажется надо запилить коннекшн пул в сценарии с опенрести и не открывать больше 20-50 коннектов
Anonymous
остальные пусть в очереди ждут
Roman
странные дела, а сейчас всего в 2 раза, 3.12с vs 1.8с 1000 итераций, покопаю в сторону пула
Anonymous
3 секунды все равно дохуя
Anonymous
возможно создание 1000 tcp коннектов причастно
Roman
То то и странно! 1 коннект 0.003с, как раз одна тысячная от 3с, и это очень много, когда mysql показывал 0.00004 за коннект
И вот явно какая-то фигня происходит
Anonymous
3 миллисекунды не много
Anonymous
все таки через лупбек идет
Anonymous
если бы доменные сокеты то можно было бы подумать
Roman
Может с опенрестей работали с базой?
Смотрю код бенчмарка openresty lua, тут при каждом обращении к серверу создается новый инстанс, новый конекшн.
И смотрю то же самое node js, один раз создался инстанс, один раз приконектился и все, все остальное время используется этот один и ему не надо никакой авторизации больше делать.
При этом у ноды результат немножко лучше, если бы можно было так же в опенрести - была бы супер скорость
Anonymous
опенрести модулем nginx-а идет?
Anonymous
я просто не писал на луа, никогда
Anonymous
как луа участвует в опенрести?
Roman
Насколько я понимаю, при каждом обращении к серверу создается поток, в этом потоке запускается lua и ответ сервера формирует
Anonymous
ну, не знаю
Roman
Anonymous
я на си пишу
Anonymous
на работе на дотнете
Anonymous
времени не хватит на всё
Anonymous
т.е. это не модуль нжинкса?
Snusmumriken
Модель нджинкса, где луа встроена в ядро.
Это, собсно, лёгкая переделка нджинкса.
Snusmumriken
Но у нджинкса собственное довольно мощное кеширование.
Roman
Да модуль 100%, добавляет директивы, луа там обратывает реквесты
То что оптимизирует и кеширует это здорово, но мы тут про sock:connect обсуждали, поток nginx на каждый реквест создает и это переиспользование сокета усложняет
Roman
вот есть ngx_postgres модуль, там наверняка не создается на каждый реквест новое соединение с базой, а для использования из луа из content_by_lua оно бесполезно, слишком оверхед большой
Snusmumriken
Везде написано, что нгинкс использует N потоков для обработки запросов, при авто - соответствующие количеству процов. Видать не пересоздаёт поток при каждом новом запросе, это слишком медленно.
Snusmumriken
Значительно быстрее гонять одну lua-state на поток, переинициализируя начальные данные/вычищая глобалспейс после выполнения скрипта, хм.
Snusmumriken
Roman
Везде написано, что нгинкс использует N потоков для обработки запросов, при авто - соответствующие количеству процов. Видать не пересоздаёт поток при каждом новом запросе, это слишком медленно.
при авто - соответствующие количеству процов
Есть воркеры - это процессы, один на ядро компа, чтобы комп всеми ядрами думал
И есть треды - один на клиента, чтобы они не в очереди стояли, а параллельно обрабатывались
Вот Вася зашел в первый воркер и ждет данных с БД, а в это время Петя в тот же воркер зашел, пока Вася ждет, и этих потоков в nginx можно хоть десятки тысяч делать
Snusmumriken
Типа, у нас есть список соединений.
Кто-то что-то прислал? Записали его запрос в список событий.
Воркер закончил работу? Загрузили его новым запросом из списка событий.
Snusmumriken
При отсутствии кеширования - воркер каждый раз создаёт новую LuaState на запрос, при наличии - использует ту которая в нём была ранее.
Roman
Там скорее один луа стейт на воркер, Вася зашел и поставил глобальную переменную, а Петя потом её прочитал, если они в один воркер попали
Roman
При том что они в разных потоках были
Snusmumriken
Нельзя использовать один луастейт в разных потоках.
Roman
Почему?
Snusmumriken
Точнее, технически возможно, но будет бешеная каша вроде той которую ты сейчас описал, плюс одновременные попытки чтения/записи приводят к неопределённому поведению, всё равно что взять случайный участок памяти и попробовать оттуда что-нибудь считать.