Рабочий вечер, пляски вокруг kdb
Jan. 13th, 2017 08:16 amОбычный рабочий вечер, переписка в slack после того, как некий запрос завесил сервер так, что Ctrl+C из локальной консоли не помогло.
user1: почему запрос `select count time/5 from sesslog` убил кдб сервер?
user2: http://code.kx.com/wiki/Reference/Slash
user3: я подозреваю что user1 хотел разделить на 5))
user2: 1. приоритет операций строго справа налево. если нет скобок
user2: 2. для деления используется %, а не /
user2: Или div если целочисленное
user1: почему убилось kdb
user2: 3. если нужно считать кол-во записей, используйте i вместо имени столбца.
VN: user2, ты как на русском форуме - отвечаешь на что угодно, кроме исходного вопроса
user2: Валик, я ткнул носом в доку
VN: user2 блин. Можешь объяснить, при чём тут over к глобальному заклину процесса?
user1: хорошо.
user1: что из этого http://code.kx.com/wiki/Reference/Slash
user1: и почему
user3: потому что твой овер рекурсивно выжрал всю доступную память процессу
VN: неправда.
VN: я вот тут воспроизвожу - память не меняется, хотя процесс жрёт 100%
user2: over: The iteration form of / terminates when either: (1) two successive results agree within comparison tolerance or (2) the result matches the initial input. The latter will save you from some infinite cycles but not all
user2: converge: When / is following a monadic function f/[g;x] will apply f to x until g returns 0b
VN: user2, ты программист. Я это понял.
guru4: а вы смотрели, во что он скомпилился? на K
guru4: (,`x)!,((/;`time);#:;5)
guru5: а ну да, теперь все понятно
(под репликой чужой смайл типа "слёзы из глаз от смеха")
user1: и это зацикливает инстанс?
guru4: да
user1: и какое поведение будет если добавить нитей?
user1: как, кроме как административно, избежать отказа в обслуживании
guru5: а в нашем интерпретаторе подсчет инструкций и всегда отдается yield в интерпретатор :)
guru4: это вежливый, хороший интерпретатор
guru4: а К просто крутит цикл
Картинка в тему.

user1: почему запрос `select count time/5 from sesslog` убил кдб сервер?
user2: http://code.kx.com/wiki/Reference/Slash
user3: я подозреваю что user1 хотел разделить на 5))
user2: 1. приоритет операций строго справа налево. если нет скобок
user2: 2. для деления используется %, а не /
user2: Или div если целочисленное
user1: почему убилось kdb
user2: 3. если нужно считать кол-во записей, используйте i вместо имени столбца.
VN: user2, ты как на русском форуме - отвечаешь на что угодно, кроме исходного вопроса
user2: Валик, я ткнул носом в доку
VN: user2 блин. Можешь объяснить, при чём тут over к глобальному заклину процесса?
user1: хорошо.
user1: что из этого http://code.kx.com/wiki/Reference/Slash
user1: и почему
user3: потому что твой овер рекурсивно выжрал всю доступную память процессу
VN: неправда.
VN: я вот тут воспроизвожу - память не меняется, хотя процесс жрёт 100%
user2: over: The iteration form of / terminates when either: (1) two successive results agree within comparison tolerance or (2) the result matches the initial input. The latter will save you from some infinite cycles but not all
user2: converge: When / is following a monadic function f/[g;x] will apply f to x until g returns 0b
VN: user2, ты программист. Я это понял.
guru4: а вы смотрели, во что он скомпилился? на K
guru4: (,`x)!,((/;`time);#:;5)
guru5: а ну да, теперь все понятно
(под репликой чужой смайл типа "слёзы из глаз от смеха")
user1: и это зацикливает инстанс?
guru4: да
user1: и какое поведение будет если добавить нитей?
user1: как, кроме как административно, избежать отказа в обслуживании
guru5: а в нашем интерпретаторе подсчет инструкций и всегда отдается yield в интерпретатор :)
guru4: это вежливый, хороший интерпретатор
guru4: а К просто крутит цикл
Картинка в тему.

no subject
Date: 2017-01-13 09:02 am (UTC)Кто такой K? Что значит (,`x)!,((/;`time);#:;5) и почему?
И почему не было реакции на Ctrl-C aka SIGINT?
Картинка не отдаётся (403 Forbidden)
no subject
Date: 2017-01-13 09:13 am (UTC)Картинку перевыложил.
> Кто такой K? Что значит (,`x)!,((/;`time);#:;5) и почему?
k, q - это языки тулзы, про которую wiki по URL в тексте заметки, и про которую я уже писал.
Расшифровывать код на этом языке не буду, кому надо - сам разберётся.
> И почему не было реакции на Ctrl-C aka SIGINT?
Вот это и я хотел бы узнать. Потому что обычно в таких ситуациях это крайнее средство перед совсем уж фатальным (убить процесс намертво).
> Папа, а ты сейчас с кем разговаривал? (q)
С кем разговаривал - с тем, кому не надо слишком детально всё объяснять :)
no subject
Date: 2017-01-13 09:22 am (UTC)no subject
Date: 2017-01-13 09:27 am (UTC)no subject
Date: 2017-01-13 10:13 am (UTC)no subject
Date: 2017-01-13 10:39 am (UTC)Ну, например, обработчик SIGINT просто выставляет флаг, который проверяется в цикле интерпретатора перед каждой (или каждой N-той) инструкцией, но до этого дело не доходит, застряёт на внутреннем цикле.
В Питоне, например, такое бывает.