Насибуллин
09.05.2018
08:25:20
Ванильные руды
Марципановые копи
Snusmumriken
09.05.2018
08:25:58
С вкраплениями маршмэллоу.
*намайнил*
Google
Lucky
09.05.2018
10:40:35
Particle
09.05.2018
13:59:26
Подскажите пожалуйста, делаю так:
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)
как заставить его решать стринг?
Philipp
09.05.2018
14:00:06
“return” .. z
Particle
09.05.2018
14:00:18
о! точна)
Спасибо, что помогли слепому)
Philipp
09.05.2018
14:01:21
))
Particle
09.05.2018
16:17:25
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
09.05.2018
16:18:40
Кстати, я может задавал уже такой вопрос, кто-нибудь на практике использовал какие либо библиотеки фаззи серча?
Philipp
09.05.2018
16:20:08
Particle
09.05.2018
16:20:24
Philipp
09.05.2018
16:20:30
Только зачем тебе время?
Particle
09.05.2018
16:20:52
это корона выдает сама
Philipp
09.05.2018
16:21:06
А
Google
Philipp
09.05.2018
16:21:11
А рандомизатор у Короны нормальный?
Дефолтный луашный не оч
Particle
09.05.2018
16:23:03
незнаю. Я использую свой, но не уверен, что это сильно лучше чем просто 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
методом тыка пробовал разные сочетания =)
Philipp
09.05.2018
16:40:06
Проблема именно в math.random
Который не ОЧЕНЬ
Посмотри, вроде в короне свой рандомизатор быть должен
Particle
09.05.2018
16:41:39
ща гляну
в короне нет своего
Tverd
10.05.2018
06:48:08
https://github.com/linux-man/randomlua
Рома
10.05.2018
11:24:38
Привет!
Не знаю зачем и почему захотелось это сделать, но есть один бенчмарк с кучей разного всякого, и луа там приуныла по позиции, и захотелось её приподнять
И такая любопытная вещь: подключение к базе 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
10.05.2018
11:25:01
Привет, Рома!
бесполезный бенч... Имхо
Насибуллин
10.05.2018
11:26:10
само подключение или обмен данными?
обмена же не идет
Рома
10.05.2018
11:26:45
имено подключение чтобы подключиться к базе под логином, и это занимает больше времени чем обмен
Tverd
10.05.2018
11:26:54
А так - разные клиенты под постгрес и мускул, вот и разница. Оп, тупанул. Внутри авторизация разная в самих серверах
Насибуллин
10.05.2018
11:27:10
можно на родном постгрес клиенте проверить
если будешь вечером в сети
кинь мне линку на рабочий постгрес
Google
Насибуллин
10.05.2018
11:27:33
я с сишной либы аутентифицируюсь
Рома
10.05.2018
11:27:40
Tverd
10.05.2018
11:29:17
Вообще мускул быстрее постгреса на простых вещах, но на тяжелых - проблема, и тут постгрес на коне. Что касается коннекта, лично на мой взгляд проблема скорее всего в авторизации, если смотреть на данный бенч
Насибуллин
10.05.2018
11:29:51
у меня просто постгреса нет на виртуалке
Tverd
10.05.2018
11:29:56
в итоге - не луа проблема )
что можно сделать - не рубить коннект, это плохая практика, а заюзать корутины и держать 10 (к примеру) открытых коннектов
Насибуллин
10.05.2018
11:31:48
коннект пул обычный подойдет тоже)
который на тредах
Tverd
10.05.2018
11:32:00
ага, норм вариант
Рома
10.05.2018
11:33:03
Ну и да, это все во nginx в openresty, получается один коннект на одного юзера, которых может быть очень много
Насибуллин
10.05.2018
11:33:34
а с консольки значит в 200 раз медленнее?
или ты прям в опенрести замерял?
Рома
10.05.2018
11:34:50
Прямо в опенрести ngx.socket.tcp и отдельно require('socket').tcp - цифры такие же
Насибуллин
10.05.2018
11:35:18
а о каких порядках идет речь?
милисекунды против секунд?
просто вполне возможно, что постгрес аутентификация занимает например 500мс а мускл 2
тогда это было бы нормально
а вообще , мне кажется надо запилить коннекшн пул в сценарии с опенрести и не открывать больше 20-50 коннектов
остальные пусть в очереди ждут
Google
Рома
10.05.2018
11:41:08
странные дела, а сейчас всего в 2 раза, 3.12с vs 1.8с 1000 итераций, покопаю в сторону пула
Насибуллин
10.05.2018
11:41:37
3 секунды все равно дохуя
возможно создание 1000 tcp коннектов причастно
Рома
10.05.2018
11:46:13
То то и странно! 1 коннект 0.003с, как раз одна тысячная от 3с, и это очень много, когда mysql показывал 0.00004 за коннект
И вот явно какая-то фигня происходит
Насибуллин
10.05.2018
11:47:15
3 миллисекунды не много
все таки через лупбек идет
если бы доменные сокеты то можно было бы подумать
Рома
10.05.2018
12:02:56
Может с опенрестей работали с базой?
Смотрю код бенчмарка openresty lua, тут при каждом обращении к серверу создается новый инстанс, новый конекшн.
И смотрю то же самое node js, один раз создался инстанс, один раз приконектился и все, все остальное время используется этот один и ему не надо никакой авторизации больше делать.
При этом у ноды результат немножко лучше, если бы можно было так же в опенрести - была бы супер скорость
Насибуллин
10.05.2018
12:03:51
опенрести модулем nginx-а идет?
я просто не писал на луа, никогда
как луа участвует в опенрести?
Рома
10.05.2018
12:05:41
Насколько я понимаю, при каждом обращении к серверу создается поток, в этом потоке запускается lua и ответ сервера формирует
Насибуллин
10.05.2018
12:06:33
ну, не знаю
Рома
10.05.2018
12:06:35
Насибуллин
10.05.2018
12:06:42
я на си пишу
на работе на дотнете
времени не хватит на всё
Snusmumriken
10.05.2018
12:22:41
Насибуллин
10.05.2018
12:23:31
т.е. это не модуль нжинкса?
Snusmumriken
10.05.2018
12:23:43
Модель нджинкса, где луа встроена в ядро.
Это, собсно, лёгкая переделка нджинкса.
Google
Snusmumriken
10.05.2018
12:24:28
Но у нджинкса собственное довольно мощное кеширование.
Рома
10.05.2018
12:26:43
Да модуль 100%, добавляет директивы, луа там обратывает реквесты
То что оптимизирует и кеширует это здорово, но мы тут про sock:connect обсуждали, поток nginx на каждый реквест создает и это переиспользование сокета усложняет
вот есть ngx_postgres модуль, там наверняка не создается на каждый реквест новое соединение с базой, а для использования из луа из content_by_lua оно бесполезно, слишком оверхед большой
Snusmumriken
10.05.2018
12:30:19
Везде написано, что нгинкс использует N потоков для обработки запросов, при авто - соответствующие количеству процов. Видать не пересоздаёт поток при каждом новом запросе, это слишком медленно.
Значительно быстрее гонять одну lua-state на поток, переинициализируя начальные данные/вычищая глобалспейс после выполнения скрипта, хм.
Рома
10.05.2018
12:36:28
Везде написано, что нгинкс использует N потоков для обработки запросов, при авто - соответствующие количеству процов. Видать не пересоздаёт поток при каждом новом запросе, это слишком медленно.
при авто - соответствующие количеству процов
Есть воркеры - это процессы, один на ядро компа, чтобы комп всеми ядрами думал
И есть треды - один на клиента, чтобы они не в очереди стояли, а параллельно обрабатывались
Вот Вася зашел в первый воркер и ждет данных с БД, а в это время Петя в тот же воркер зашел, пока Вася ждет, и этих потоков в nginx можно хоть десятки тысяч делать
Snusmumriken
10.05.2018
12:36:52
Типа, у нас есть список соединений.
Кто-то что-то прислал? Записали его запрос в список событий.
Воркер закончил работу? Загрузили его новым запросом из списка событий.
При отсутствии кеширования - воркер каждый раз создаёт новую LuaState на запрос, при наличии - использует ту которая в нём была ранее.
Рома
10.05.2018
12:38:37
Там скорее один луа стейт на воркер, Вася зашел и поставил глобальную переменную, а Петя потом её прочитал, если они в один воркер попали
При том что они в разных потоках были
Snusmumriken
10.05.2018
12:39:15
Нельзя использовать один луастейт в разных потоках.
Рома
10.05.2018
12:39:33
Почему?
Snusmumriken
10.05.2018
12:40:18
Точнее, технически возможно, но будет бешеная каша вроде той которую ты сейчас описал, плюс одновременные попытки чтения/записи приводят к неопределённому поведению, всё равно что взять случайный участок памяти и попробовать оттуда что-нибудь считать.
Рома
10.05.2018
12:41:25
> но будет бешеная каша вроде той которую ты сейчас описал
так это глобальные переменные, это нормально!
для реальных задач они глобальные трогать не будут и все хорошо
Snusmumriken
10.05.2018
12:42:01
Карочи, копай либы вроде Lua Lanes. Оно позволяет из луёв открывать дополнительные LuaState'ы и работать с ними. И там много мороки с мьютексами/семафорами даже внутри местных связок между потоками.
Рома
10.05.2018
12:44:04
рести прекрасно их спавнит и у него есть семафоры
Snusmumriken
10.05.2018
12:44:15
Рома
10.05.2018
12:44:43
какой-то это сделает раньше