gentoo.ru
Общение на окологентушные темы
gentoo@conference.gentoo.ru
Пятница, 26 июня 2015< ^ >
winterheart установил(а) тему: Gentoo Linux || FAQ: http://www.gentoo.ru/faq || Вставки более 3 строк → app-text/wgetpaste || Логи: http://gentoo.ru/jabber/logs/ || Языками чешут в talks@conference.gentoo.ru ||  Фортунки http://fortunes.gentoo.ru || Gentoo.RU переехал целиком на Yandex || Gentoo Iron Penguin
Конфигурация комнаты
Участники комнаты

GMT+3
[00:00:01] CarelessChaser вошёл(а) в комнату
[00:35:20] CarelessChaser вышел(а) из комнаты
[00:39:46] bober2000 вышел(а) из комнаты
[00:55:56] diko вошёл(а) в комнату
[01:06:12] <Civilian> slepnoga: глядел обзор на NVMe ссдшку от самсунга?
[01:15:49] CarelessChaser вошёл(а) в комнату
[01:17:10] Night Nord вышел(а) из комнаты
[01:39:00] diko вышел(а) из комнаты
[01:55:24] beelzebubbie вышел(а) из комнаты
[02:10:50] maksbotan вышел(а) из комнаты
[02:25:54] ruda вышел(а) из комнаты: Replaced by new connection
[02:26:04] ruda вошёл(а) в комнату
[02:27:02] ruda вышел(а) из комнаты: Replaced by new connection
[02:27:12] ruda вошёл(а) в комнату
[03:34:15] Civilian вышел(а) из комнаты
[04:50:02] reonaydo вошёл(а) в комнату
[05:00:34] beelzebubbie вошёл(а) в комнату
[06:20:55] GoodWin вышел(а) из комнаты
[06:21:38] GoodWin вошёл(а) в комнату
[07:20:59] GoodWin вышел(а) из комнаты
[07:21:22] GoodWin вошёл(а) в комнату
[07:30:50] nordwind вышел(а) из комнаты
[07:30:52] diko вошёл(а) в комнату
[07:37:16] intellect вошёл(а) в комнату
[07:43:15] slepnoga вошёл(а) в комнату
[08:25:41] fsteinel вошёл(а) в комнату
[08:42:32] beelzebubbie вышел(а) из комнаты
[08:48:38] Civilian вошёл(а) в комнату
[09:01:05] slepnoga вышел(а) из комнаты
[09:10:16] evadim вошёл(а) в комнату
[09:28:18] Night Nord вошёл(а) в комнату
[09:35:21] Night Nord вышел(а) из комнаты
[09:52:42] fsteinel вышел(а) из комнаты
[10:06:02] <Civilian> 0xd34df00d: чо ты думешь про libcds?
[10:06:23] <Civilian> точнее так - что по твоему интереснее - ConcurrencyKit или libcds?
[10:10:28] CarelessChaser вышел(а) из комнаты
[10:38:31] beelzebubbie вошёл(а) в комнату
[11:00:10] ASM вышел(а) из комнаты
[11:00:44] fsteinel вошёл(а) в комнату
[11:04:34] CarelessChaser вошёл(а) в комнату
[11:23:38] maksbotan вошёл(а) в комнату
[11:41:56] intellect вышел(а) из комнаты
[11:57:06] Desu вошёл(а) в комнату
[12:17:05] mva вышел(а) из комнаты
[12:17:28] mva вошёл(а) в комнату
[12:41:07] evadim вышел(а) из комнаты: Replaced by new connection
[12:41:17] evadim вошёл(а) в комнату
[12:42:48] fsteinel вышел(а) из комнаты
[12:46:36] maksbotan вышел(а) из комнаты
[12:47:14] intellect вошёл(а) в комнату
[12:49:45] intellect вышел(а) из комнаты
[12:52:09] intellect вошёл(а) в комнату
[12:55:58] intellect вышел(а) из комнаты
[12:57:18] intellect вошёл(а) в комнату
[12:58:17] intellect вышел(а) из комнаты
[12:59:25] intellect вошёл(а) в комнату
[12:59:59] intellect вышел(а) из комнаты
[13:00:36] intellect вошёл(а) в комнату
[13:00:50] intellect вышел(а) из комнаты
[13:03:02] intellect вошёл(а) в комнату
[13:04:40] eegorov вышел(а) из комнаты
[13:04:40] intellect вышел(а) из комнаты
[13:06:03] intellect вошёл(а) в комнату
[13:06:21] intellect вышел(а) из комнаты
[13:07:14] eegorov вошёл(а) в комнату
[13:07:57] intellect вошёл(а) в комнату
[13:08:29] intellect вышел(а) из комнаты
[13:09:51] eegorov вышел(а) из комнаты
[13:10:04] intellect вошёл(а) в комнату
[13:10:35] intellect вышел(а) из комнаты
[13:12:10] eegorov вошёл(а) в комнату
[13:12:20] eegorov вышел(а) из комнаты
[13:15:39] eegorov вошёл(а) в комнату
[13:15:56] eegorov вышел(а) из комнаты
[13:17:46] eegorov вошёл(а) в комнату
[13:19:11] eegorov вышел(а) из комнаты
[13:19:24] eegorov вошёл(а) в комнату
[13:19:43] eegorov вышел(а) из комнаты
[13:20:04] eegorov вошёл(а) в комнату
[13:22:51] diko вышел(а) из комнаты
[13:25:48] eegorov вышел(а) из комнаты
[13:26:28] eegorov вошёл(а) в комнату
[13:27:16] eegorov вышел(а) из комнаты
[13:35:12] <0xd34df00d> Civilian: про второе я слышал много, на хабре статьи вкусные, и в блумберге одобрено.
[13:35:15] <0xd34df00d> ПРо первое не слышал даже.
[13:38:48] medvedko вошёл(а) в комнату
[13:46:05] reonaydo вышел(а) из комнаты: Отключён
[13:48:51] <Civilian> 0xd34df00d: ок, клево
[13:56:23] <Civilian> 0xd34df00d: а ты можешь вкратце рассказать про тамошние алгоритмы?
[13:56:59] <Civilian> конкретно про хэши
[14:08:03] slepnoga вошёл(а) в комнату
[14:09:15] hitecnologys вышел(а) из комнаты
[14:14:55] hitecnologys вошёл(а) в комнату
[14:15:24] <0xd34df00d> Civilian: воспроизвести не смогу, я не спец по локфри )
[14:15:40] <Civilian> ок, ну ладно )
[14:15:52] <0xd34df00d> Прст ради собственного интереса и кругозора читал, скажем так.
[14:15:53] <Civilian> мне просто нужен lock-free на чтение хэш
[14:16:05] <Civilian> на запись и расширение он может быть каким угодно неоптимальным
[14:16:19] <Civilian> x86-64 only
[14:16:36] <Civilian> т.е. на арме может не работать, но если будет - плюс. На остальные архитектуры плевать от слова совсем
[14:41:40] medvedko вышел(а) из комнаты
[14:53:36] CarelessChaser вышел(а) из комнаты
[15:28:46] ASM вошёл(а) в комнату
[15:53:47] nis вошёл(а) в комнату
[15:54:24] <nis> Civilian: а что тебе нужно?
[15:54:39] <Civilian> nis: я ж написал )
[15:54:47] <Civilian> nis: lock-free хэш-таблица на чтение
[15:54:53] <nis> хм
[15:55:01] <nis> такого в стандартной либе нету
[15:55:08] <nis> если толкьо покупное
[15:55:11] <Civilian> nis: в стандартной либе вообще ничего нет лок-фри
[15:55:16] <nis> почему
[15:55:20] <Civilian> nis: есть libcds и ConcurentKit
[15:55:22] <Civilian> там есть
[15:55:29] <Civilian> но разные алгоритмы, сумарно их штук 5
[15:55:30] <nis> есть лок-фри пототипы
[15:55:31] <Civilian> на две либы
[15:55:39] <nis> в 11ом стандарте
[15:55:42] <nis> и синхры
[15:55:47] <Civilian> я хочу понять + и - разных подходов чтобы понять что мне нужно
[15:55:58] <Civilian> на самом деле потом же мне, возможно, понадобится lock-free список
[15:56:02] <nis> лок-фри это неуправляемый сакс
[15:56:11] <nis> Civilian: возьми книгу по этому
[15:56:16] <nis> там всё описано
[15:56:22] <Civilian> nis: а lock-based это блокирующий сакс )
[15:56:27] <Civilian> nis: по этому - по чему?
[15:56:32] <nis> по лок-фри
[15:56:41] <nis> и вообще параллельным системам
[15:56:44] Desu вышел(а) из комнаты
[15:56:50] <nis> в реализации на 11ом стандарте
[15:56:52] <Civilian> nis: не знаю таких книг
[15:57:05] <nis> могу скинуть
[15:57:16] <Civilian> nis: ну и мне было бы конечно приятно с нуля сделать, но я хотел бы пока взять готовое из 5-и
[15:57:20] <Civilian> а потом реализовать самому
[15:57:36] <nis> там указания где что взять тоже есть
[15:57:45] <Civilian> nis: две либы я нашел
[15:57:55] <Civilian> ну книгу кидай по любому
[15:57:57] <Civilian> пригодится
[15:58:09] <nis> на почту?
[15:58:12] <Civilian> давай туда
[15:58:58] <0xd34df00d> Civilian: на чтение просто читай параллельно.
[15:58:59] <0xd34df00d> И лочь на запись.
[15:59:00] <0xd34df00d> Чо там.
[15:59:37] <Civilian> 0xd34df00d: как я понимаю, суть в том чтобы пока меняется таблица, чтение было консистентным
[15:59:39] <nis> 0xd34df00d: а валидность
[15:59:39] <0xd34df00d> Civilian: норм книга C++ Concurrency in action.
[15:59:43] <0xd34df00d> Забыл, как называется.
[15:59:45] <Civilian> поэтому нужно городить всякую фигню
[15:59:52] <0xd34df00d> s/как называется/как точно называется/
[16:00:00] <0xd34df00d> Civilian: вообще зависит от паттернов нагрузок.
[16:00:05] <nis> 0xd34df00d: я на переводе ему скину щас
[16:00:09] <nis> у меня она есть
[16:00:11] <0xd34df00d> Если контеншн низкий, то можно самому на спинлоках навелосипедить.
[16:00:13] <0xd34df00d> nis: > в переводе
[16:00:17] <0xd34df00d> Rasstreliert!
[16:00:34] <Civilian> 0xd34df00d: м... есть штука которая пишет, писать оно будет в очередь (или кольцевой буфер, не уверен пока, я за очередь) по ключу
[16:00:37] <Civilian> ключ - строка
[16:00:46] <Civilian> новые ключи добавляются редко (от слова почти никогда)
[16:00:52] <Civilian> а вот чтение будет часто
[16:00:54] <Civilian> очень
[16:01:05] <0xd34df00d> Civilian: сколько ридеров, сколько райтеров? Как часто райтер добавляет по конкретному ключу?
[16:01:28] <nis> Civilian: как днс?
[16:01:29] <Civilian> 0xd34df00d: много и много
[16:01:43] <Civilian> 0xd34df00d: ридеров и райтеров я не знаю какой баланс, скорее всего 4 и 4
[16:01:46] <nis> я скину книгу
[16:01:52] <nis> там такой пример тоже был
[16:01:53] <Civilian> точнее колличество_ядер / 2 и тех и тех
[16:01:56] <0xd34df00d> Потому что есть вариант, что тебе может быть оптимально иметь отдельный спинлок на саму таблицу, и отдельные спинлоки для каждого ключа.
[16:02:12] <Civilian> 0xd34df00d: а вот как часто добавляют данные по ключу - офигенно часто
[16:02:28] <nis> 0xd34df00d: там инварианты быстро развалятся
[16:02:40] <Civilian> скажем так, если удастся на 1 запись (записываться два числа, сумарно 128бит)
[16:03:05] <Civilian> если на запись удастся тратить меньше 1 мкс будет хорошо, лучше еще быстрее
[16:03:22] <nis> Civilian: на look-free у тебя будет проблема со скростью
[16:03:23] <Civilian> 1 мкс на "типичном i7 гигагерц на 3"
[16:03:34] <Civilian> nis: а с lock-based будет проблема с масштабированием
[16:03:36] <nis> т.к. на каждую такую запись нужна синхронизация
[16:03:46] <nis> а это + 100 мкс
[16:03:51] <nis> на каждый элемент
[16:04:08] <0xd34df00d> nis: с чего б?
[16:04:17] <Civilian> nis: как раз в lock-based это +100мкс
[16:04:26] <Civilian> в lock-free можно добиться 1мкс
[16:04:33] <Civilian> если подобрать правильные алгоритмы
[16:04:37] <nis> 0xd34df00d: с того что это описано в той самой книге
[16:04:38] <Civilian> и пожертвовать скоростью чтения
[16:06:18] <0xd34df00d> nis: это плохой аргумент.
[16:06:28] <0xd34df00d> Там частные случаи кривой реализации рассматриваются.
[16:06:29] <0xd34df00d> Лан.
[16:06:33] <0xd34df00d> Пойду биоинформатику поботаю.
[16:06:48] <Civilian> nis: ты меня заставил лезть в даташит
[16:06:58] <Civilian> я этим фактом недоволен )
[16:07:57] <Civilian> потому что его фиг найдешь
[16:08:21] <Civilian> в смысле их много и надо все качать и пырить
[16:08:48] <nis> Civilian: синхронизация, особенности на многопроцессорной машине вещь унылая
[16:08:50] <nis> и не быстрая
[16:08:54] <nis> проще делить данные
[16:09:04] <nis> через атомики на владения
[16:09:08] <Civilian> nis: ну на чтение скорее всего я и буду делить
[16:09:15] <Civilian> но суть в том что ресайз хэш-таблицы тоже возможен
[16:09:36] <nis> а при записи забирать права и через барьер всех удерживать
[16:10:02] <nis> либо по принципу асинхронной очереди разбирать
[16:10:14] <nis> у тебя вообще насколько критично будет если данные неактуальны?
[16:10:43] <Civilian> nis: данные - append only
[16:10:52] <Civilian> терять нельзя, а писать только кусок можно
[16:11:57] <nis> да я к тому, почему ты не хочешь сделать сбалансированным деревом
[16:12:02] <nis> например красно-чёрным
[16:12:09] <nis> и его дробить между потоками
[16:12:27] <nis> почему обязательно хэш?
[16:12:28] <Civilian> nis: запись строго последовательная
[16:12:33] <Civilian> nis: потому что ключ все равно строка
[16:12:40] <Civilian> тут лучше выбор иметь за O(1)
[16:13:16] <Civilian> nis: смотри. Приходит поток с данными
[16:13:17] <Civilian> писать их
[16:13:27] <Civilian> его ключ - это строка
[16:13:49] <Civilian> т.е. данные потом в других потоках нужно будет записать на диск в файл, имя которого базируется на этой строке
[16:13:50] <nis> О(1) в любом случае не будет
[16:13:59] <Civilian> nis: будет если взять массив
[16:14:07] <Civilian> nis: O(1) Для поиска куда писать
[16:14:13] <slepnoga> Civilian: это у тебя дембель или наоборот - дедовщина ? :)
[16:14:19] <Civilian> slepnoga: свободное время
[16:14:33] <slepnoga> не буду мешать ;)
[16:14:49] <nis> Civilian: у тебя рост вообще у ключей планируется?
[16:15:06] <Civilian> nis: как экстраординарное событие
[16:15:26] <Civilian> nis: т.е. точнее так - после запуска он будет расти какое-то время, потом выйдет в насыщение и расти перестанет практически полностью
[16:15:30] <Civilian> как и уменьшаться не будет
[16:15:45] <Civilian> т.е. рост возможен конечно, но маловероятен
[16:15:54] <Civilian> или это будет единичное событие, типа бац, +30 ключей
[16:15:59] <Civilian> к имеющимся тысячам
[16:16:04] <Civilian> и неделю не растет
[16:16:08] <Civilian> потом еще бац, +30 ключей
[16:16:11] <Civilian> как-то так
[16:16:25] <Civilian> nis: это все про графики, если чо
[16:16:36] <Civilian> событие вида "добавили сервер" или "добавили метрику" не часто встречается
[16:16:43] <Civilian> а писать будут дофига
[16:17:00] <nis> хм
[16:17:09] <nis> ты решил переписать ядро как я понял?
[16:17:13] <Civilian> читать будут иногда (реже чем писать на порядки)
[16:17:17] <Civilian> базу данных
[16:17:17] <Civilian> ну да
[16:17:32] <nis> они же у тебя независимы?
[16:17:40] <Civilian> nis: кто? ключи? да
[16:17:47] <nis> значения
[16:18:12] <nis> т.е. если я забираю себе по ключу, оно больше никому не нужно?
[16:18:20] <Civilian> nis: не совсем
[16:18:27] <nis> а конкретнее?
[16:18:27] <Civilian> nis: есть 2 конкурирущиюх процесса
[16:18:32] <Civilian> один - чтение от человека
[16:18:37] <Civilian> ему нужно отдать, если оно есть в памяти
[16:18:41] <Civilian> если нету - прочитать с диска
[16:18:55] <Civilian> и второй процесс - дописать на диск
[16:19:12] <Civilian> я планирую сигнализировать о том, что диапазон значений для ключа записан и не нужен больше
[16:19:16] <nis> т.е. ещё и кэш менеджер?
[16:19:19] <Civilian> но пока он не записан, он должен быть в памяти
[16:19:25] <Civilian> nis: все значения попадают в кэш
[16:19:26] <Civilian> сначала
[16:19:36] <Civilian> из кэша минимум два процесса, которые их читают
[16:19:44] <Civilian> один читает с целью записать, читает сразу все  что есть
[16:19:47] <nis> а сетевых процессов сколько?
[16:20:29] <Civilian> nis: не знаю пока, минимум 2 (один который будет писать данные и 1 который будет обрабатывать пользовательские запросы)
[16:20:33] <Civilian> но возможно больше
[16:20:48] <Civilian> притом баланс может быть вида 3 пишущих
[16:20:54] <Civilian> и 1 пользовательский интерфейс
[16:21:01] <Civilian> мб наоборот, 1 пищущий и 3 интерфейса
[16:21:03] <Civilian> или 2 +2
[16:21:07] <Civilian> хоть 100 + 100 )
[16:21:30] <nis> а асинхронно сделать?
[16:21:41] <nis> у тебя как я понял потолочный это сеть + диск?
[16:22:17] <nis> т.е. тут не нужно много процессов
[16:22:50] <Civilian> nis: диск тоже любит запись в несколько процессов, как ты понимаешь
[16:23:00] <Civilian> nis: ну оно все на event-loop'е будет
[16:23:01] <nis> не совсем
[16:23:03] <Civilian> скорее всего
[16:23:12] <nis> диск любит когда много и сразу
[16:23:15] <Civilian> да
[16:23:28] <Civilian> nis: про запись на диск я вообще пока не рассматриваю ничего
[16:23:29] <nis> но т.к. у нас пингвин мы может на это не обращать внимание
[16:23:32] <Civilian> это отдельный блок
[16:23:33] <nis> ну да
[16:23:41] <nis> хотя про него тоже не стоит забывать
[16:23:49] <Civilian> nis: иметь в виду и пилить потом
[16:23:56] <nis> ну да
[16:23:59] <Civilian> nis: это пока излишнее усложнение
[16:24:05] <Civilian> задача №1 - принять данные
[16:24:09] <Civilian> а потом уже думать что с ними делать
[16:24:15] <nis> вообще у тебя работа аналогична той что делает торрент - клиент
[16:24:22] <nis> только более извращённая
[16:24:48] <nis> т.е. есть обновлённые данные
[16:25:00] <Civilian> nis: не обновление, а дописывание
[16:25:02] <Civilian> это важно
[16:25:06] <nis> которые надо записать и есть те данные которые запланированы на чтение
[16:25:16] <nis> а если дописывание это вообще удобно
[16:25:24] <Civilian> nis: и не совсем аналогична, требования разные
[16:25:24] <nis> мы просто ловим хвост и дополняем
[16:25:43] <Civilian> nis: ИМХО тебя понесло не в ту степь сейчас
[16:26:16] <nis> Civilian: я просто пока не увидел причин почему ты хочешь сделать это кучей потоков
[16:26:48] <Civilian> nis: сумарно потоков должно быть столько же, сколько ядер
[16:26:53] <Civilian> не больше
[16:26:59] <Civilian> но это таки куча
[16:27:07] <Civilian> в 1 поток я боюсь не перелопатить это все
[16:27:47] <nis> не стал бы так говорить
[16:27:55] <Civilian> nis: ты не в курсе задачи
[16:27:55] <nis> т.к. пока не ясно сколько весит одна операция
[16:28:09] <nis> и что будет дороже
[16:28:47] <nis> Civilian: у тебя питон справляется, а там глобальная блокировка на уровне ядра
[16:28:57] <nis> т.е. по сути однопоточное приложение
[16:29:45] <Civilian> nis: у меня питон справляется условно. Во первых я хочу 10x скорости относительно него минимум. Во вторых там процессов по колличеству ядер и consistent-hash на базе имени метрики, написанный на Сях перед ним.
[16:29:52] <Civilian> и упирается оно в CPU
[16:29:59] <Civilian> по сети запас 10x
[16:30:03] <nis> хм
[16:30:06] <Civilian> я хочу чтобы оно упиралось в сеть
[16:30:19] <nis> Civilian: а ты смотрел где оно в процессоре толсто?
[16:30:23] <Civilian> nis: оно жрет ровно 4 ядра + HT (от HT выигрывает 20%)
[16:30:29] <Civilian> nis: в недрах питона
[16:30:34] <nis> вот
[16:30:38] <Civilian> nis: в смысле оно толсто потому что не на сях
[16:30:52] <Civilian> и там другая беда - по disk i/o запас 2x всего
[16:30:54] <Civilian> можно лучше
[16:30:59] <nis> а ты попробуй симулировать работу в одном потоке
[16:31:13] <Civilian> nis: м?
[16:31:19] <Civilian> симулировать работу чего?
[16:31:26] <nis> ПО
[16:31:27] <Civilian> ты предлагаешь питонокод на си переписать? смысла нет
[16:31:32] <nis> зачем
[16:31:40] <Civilian> я не понимаю что ты предлагаешь сделать
[16:31:44] <nis> просто выполняющий почти аналогичную работу
[16:31:55] <nis> чтобы понять где узко
[16:32:15] <Civilian> nis: узко в парсинге строк и в том как в питонософтине реализована очередь на запись данных
[16:32:25] <Civilian> плюс в принципе в интерпретаторе питона
[16:33:28] <nis> не думаю
[16:33:42] <nis> т.е. базовые данные в питоне реализованы на сях
[16:34:01] <nis> т.е. разброс может быть разным
[16:34:26] <nis> Civilian: ты смотрел сколько у тебя из времени тратится на пользовательское пространство, а сколько на ядерное?
[16:43:47] Civilian вышел(а) из комнаты: Replaced by new connection
[16:43:57] Civilian вошёл(а) в комнату
[16:44:15] <Civilian> nis: на пользовательское большая часть времени
[16:44:30] <Civilian> nis: еще раз, я знаю как быстро оно может работать
[16:44:59] <Civilian> если взять эффективную базу данных (проприетарную, просто в целом эффективную) на запись данных оно может вытянуть на том же железе в 10-15 раз больше
[16:45:03] <Civilian> и упереться в I/O
[16:45:10] <Civilian> но проблема в проприетарности решения
[16:45:32] <Civilian> nis: при этом в питонокоде копаться не стоит, он очень ужасен
[16:45:40] <Civilian> по стилю
[16:45:45] <Civilian> авторы плевать хотели на pep8
[16:45:48] <Civilian> от слова совсем
[16:45:56] <Civilian> на всё на что можно - наплевали
[16:45:59] <Civilian> читать сложно
[16:46:13] <nis> ну а что ты хотел от оптимизации
[16:46:13] <Civilian> в коде куча нагромождений которые непонтяно кому и зачем нужны
[16:46:15] <Civilian> и пр.
[16:46:37] <Civilian> nis: я хочу ту же скорость (или примерно ту же) как на проприетарном решении видел, но в опенсорсной базе
[16:46:51] <Civilian> не больше и не меньше
[16:47:18] <Civilian> nis: но исходя из того что я видел, ни одно из текущих решений общего назначения её не достигает
[16:48:05] <Civilian> или упирается в диск (там где проприетарное более успешно кэшировало данные в памяти и сводило random i/o к sequential, опенсорсные тупо пишет и упирается в IOPS'ы, настройками не рашется)
[16:48:08] <Civilian> или упираются в CPU
[16:48:15] <Civilian> потому что творят неведомую фигню с данными
[16:48:35] <Civilian> ну либо разработчики начинают считать что они умнее всех и делают свой формат данных несовместимым (в здравом уме) с тем что прийдет в итоге
[16:48:45] <Civilian> например распределение по воркерам через regexp'ы
[16:48:49] <Civilian> гениально помоему
[16:48:52] <nis> ну да
[16:48:57] <nis> ничего гениальней нету
[16:49:03] <Civilian> метаданные в памяти зачем-то редуцируют до регулярки
[16:49:14] <Civilian> и входные данные по регулярке проверяют на соответствие
[16:49:21] <Civilian> подрят по колличеству воркеров
[16:49:30] <Civilian> на чтение как-то также
[16:49:50] <nis> я думаю если на С++ переписать будет быстрей раз в 10
[16:49:58] <nis> без регулярок
[16:50:08] <Civilian> nis: тут проблема знаешь в чем?
[16:50:13] <Civilian> что есть пара задач параллельно
[16:50:14] <nis> в чём?
[16:50:16] <Civilian> парсинг входящих строк
[16:50:26] <nis> а это точно строки?
[16:50:28] <Civilian> данные прилетают в строковм виде
[16:50:29] <Civilian> nis: точно
[16:50:41] <nis> а длина фиксированная или нет?
[16:50:44] <Civilian> nis: нет конечно
[16:50:50] <nis> ок
[16:50:59] <nis> а разбить можно на классы по длине?
[16:51:39] <Civilian> nis: это строка с названием произвольной длинны, одно число фиксированной длины (uint32 с unixts) и одно с float64 без ограничения по точности но с ограничением по формату
[16:51:50] <Civilian> вот считай сам какая длина там
[16:51:56] <Civilian> разделитель - пробел
[16:52:13] <nis> пичаль
[16:52:20] <nis> а бинарными никак?
[16:52:23] <Civilian> nis: никак
[16:52:31] <nis> трешь
[16:52:37] <Civilian> nis: ну то есть для бинаризации нужно переделывать ВЕСЬ софт
[16:52:38] <nis> данные не оптимальны
[16:52:39] <Civilian> это не вариант
[16:52:51] <Civilian> nis: ну вот проприетарное решение на парсинг и запись жрало 4 ядра
[16:52:56] <Civilian> и упиралось в сеточку
[16:53:00] <Civilian> хочу также
[16:53:10] <nis> надо их как-то на входе преобразовать в бинарные
[16:53:22] <Civilian> nis: да, в сеточку пролизает миллион строк в секунду в принципе.
[16:53:24] <nis> одно это кушает не мало
[16:53:32] <Civilian> nis: ага
[16:53:43] <nis> я бы сказал почти все ресурсы
[16:53:49] <Civilian> nis: см выше
[16:53:59] <Civilian> nis: я видел решение которое даже с учетом парсинга строк справлялось
[16:54:17] <nis> а дальше мы берём любую структуру данных с мьютексами и наслаждаемся
[16:54:17] <Civilian> nis: питонокод кушает 80 тысяч строк в секунду
[16:54:21] <Civilian> Си++ - млн
[16:54:30] <Civilian> цель достичь хотя бы 800 тысяч
[16:54:52] <Civilian> nis: я боюсь не взлетит с мьютексами. Слишком много всего
[16:55:08] <Civilian> nis: точнее я почти уверен что одно взятие мьютексов убьет скорость
[16:55:08] <nis> Civilian: а в режиме хранения в озу ты пробовал накормить 1 млн строк?
[16:55:18] <Civilian> nis: в смысле?
[16:55:32] <Civilian> nis: питонокод не умеет хранить в ОЗУ. У него кэш фиксированного размера
[16:55:35] <nis> создать в озу 1 млн случайных записей и их разобрать
[16:55:37] <Civilian> точнее кольцевой буфер
[16:55:45] <nis> в С++
[16:55:46] <Civilian> nis: прекрасно разбирается в 2 потока
[16:55:59] <Civilian> т.е. 2 потока способно перелопатить 1 млн строк в секунду
[16:56:11] <nis> два потока чего?
[16:56:15] <nis> и где?
[16:56:15] <Civilian> если использовать специализированные atoi и atof
[16:56:31] <Civilian> nis: 2 потока и есть 2 потока. Что значит чего и где?
[16:56:38] <nis> ты про Си?
[16:56:43] <Civilian> nis: я пробовал реализовывать парсер из строки в бинарные данные
[16:56:47] <Civilian> на плюсах
[16:56:48] <nis> ага
[16:56:51] <Civilian> не очень оптимально притом
[16:56:56] <nis> ну понятно
[16:56:56] <Civilian> т.е. я знаю какие там косяки
[16:57:03] <Civilian> в 2 потока мой код справлялся
[16:57:13] <Civilian> если оптимизировать то будет справляться наверняка
[16:57:13] <nis> а хранил в чём?
[16:57:17] <Civilian> nis: в памяти :)
[16:57:24] <nis> я про контейнер
[16:57:42] <Civilian> nis: linked list
[16:58:28] <nis> интересно
[16:59:01] <Civilian> nis: хэш из linked-list'ом точнее
[16:59:01] <Civilian> не помню какой хэш брал, помоему что-то из бустового Lock-free
[17:00:52] <Civilian> nis: я делал очень наивную реализацию, притом atoi брал библиотечное
[17:00:56] <Civilian> а atof брал из буста
[17:01:00] <Civilian> в смысле конвертилку
[17:01:03] <Civilian> они не оптисальные, оба
[17:01:23] <Civilian> очень даже неоптисальные
[17:01:38] <Civilian> atoi александреску из блога вполне удовлетворяет моим ограничениям и быстрее в 20 раз
[17:01:41] <Civilian> например
[17:02:08] <Civilian> а atof если сделать naive заложившись на то что данные только в вещественном виде, никакой scientific notation - тоже быстрее на порядок
[17:02:18] <Civilian> так что мб даже в 1 поток оно и справится
[17:02:24] <Civilian> но тут не знаю
[17:02:43] <nis> надо попробовать однопоточным
[17:02:52] <Civilian> nis: лучше не закладываться на это
[17:03:01] <Civilian> nis: могут быть ситуации когда много writer'ов, а не один
[17:03:03] <nis> я не говорю что закладываться
[17:03:07] <Civilian> тогда однопоточный вариант будет печален
[17:03:11] <Civilian> если ОЧЕНЬ много их
[17:03:43] <nis> ну лучше сделать один специфик и понять где узкие места, чем думать о разных вещах
[17:04:20] <Civilian> nis: узкое место я и так знаю (как я думаю) - парсинг и выбор места куда писать
[17:04:28] <Civilian> так чтоб потом это можно было отдать на запись
[17:05:26] <nis> Civilian: ты гонял это валгриндом?
[17:05:46] <Civilian> nis: не очень подробно
[17:05:47] <nis> если нет, то не факт что ты знаешь об узких местах
[17:05:59] <Civilian> nis: я перфом смотрел, это точно
[17:06:48] <nis> мне кажется проще дописать для каждой машины шнягу, которая будет упаковывать в бинарный формат данные
[17:07:04] <nis> и получить +100500 к производительности
[17:07:13] <Civilian> nis: тут дело в чем
[17:07:25] <Civilian> nis: я хочу эту штуку позиционировать как drop-in replacement
[17:07:30] <Civilian> тому что есть в опенсорсе
[17:07:44] <Civilian> а значит нужна совместимость по протоколу
[17:08:00] <Civilian> потом можно сделать 2 listner'а
[17:08:03] <Civilian> бинарный и текстовый
[17:08:32] <Civilian> и если с текстовым все будет клево и хорошо, объявить текстовый deprecated и порекомендовать переехать на бинарный
[17:08:53] <Civilian> к тому же у меня есть хитрый план по оптимизации бинарного интерфейса
[17:09:07] <Civilian> и вообще идеи о том чтобы даже юзеру дать бинарный интерфейс притом еще с pubsub'ом
[17:20:31] CarelessChaser вошёл(а) в комнату
[17:22:07] <nis> Civilian: задачка интересная
[17:29:21] <nis> но в любом случае рекомендую изучить вопрос с точки зрения однопоточного приложения
[17:31:57] <0xd34df00d> Вот, кстати, да.
[17:32:07] <0xd34df00d> У меня тут задача была, прочитать файл в хитром формате и проиндексировать.
[17:32:22] <0xd34df00d> Я хотел выделить читалку в один поток, чтобы она читала и парсила тама, а индексировалку — в другой.
[17:32:32] <0xd34df00d> Ибо чтение занимало примерно треть, индексирование — оставшиеся две трети.
[17:32:57] <0xd34df00d> А потом я выкинул нахрен ifstream, взял mmap и самописный токенайзер и парсер чисел, и время чтения и парсинга стало равно нулю.
[17:33:03] <0xd34df00d> И никаких потоков не надо.
[17:33:06] <0xd34df00d> Такое.
[17:34:57] <nis> 0xd34df00d: ну вот про то и речь
[17:35:05] <nis> что многопоточность это ненужное
[17:36:44] <0xd34df00d> На самом деле часто нужное.
[17:38:33] <nis> 0xd34df00d: только в случае если у тебя работа блокируется
[17:38:48] <nis> а в иных случаях можно решить и без них
[17:39:28] <0xd34df00d> Или просто хорошо параллелится.
[17:39:40] <nis> ну или да
[17:40:13] <nis> а за частую ты не знаешь что у тебя, и в итоге получаешь минус вместо плюса
[18:17:06] <Civilian> nis: я не хочу полагаться только на ОС, поэтому многопоточность надо иметь в виду изначально
[18:17:29] <Civilian> nis: и есть еще два фактора которые ты не учитываешься
[18:19:26] <nis> Civilian: я просто видел много приложений в которых не смотря на небольшое количество потоков работа велась эффективней чем в многопоточных
[18:19:29] <Civilian> nis: первое это отзывчивость
[18:19:51] <Civilian> т.е. как минимум чтение и запись должны быть разными потоками
[18:20:11] <Civilian> а на самом деле работа с клиентом, обработка новых данных и запись - это три разных потока
[18:20:31] <Civilian> nis: а во вторых, это в гигабит пролезает млн в секунду
[18:20:38] <Civilian> а в 10 гбит пролезает 10 млн в секунду )
[18:20:40] <Civilian> в теории
[18:20:52] <Civilian> ставим 10гбит сеть и опять упремся в CPU
[18:20:56] <Civilian> тут уже без вариантов
[18:21:49] <Civilian> даже допустим у нас будет 50% цпу тратится на парсинг и складывание данных (я в это не верю) на 1 млн
[18:21:58] <Civilian> т.е. в 4 раза более оптимальную штуку я сделаю
[18:22:07] <Civilian> то на 10x данных оно уже ляжет
[18:22:36] <nis> Civilian: ты во первых слишком рано думаешь об оптимизации, даже не зная точных затрат на каждую операцию
[18:22:47] <nis> во вторых не имеешь модели своей системы
[18:22:52] <Civilian> nis: да
[18:23:11] <nis> и в третьих не правильно представляешь себе многопоточную систему
[18:23:53] <Civilian> nis: а как правильно?
[18:24:28] <nis> правильно начинать с того что определить что именно ты делаешь и как ты будешь делить задачу на части
[18:25:04] <Civilian> nis: у меня пока есть немного сумбурное представление о разбиении на классы и полная диаграмма потока данных между кусками
[18:25:09] <Civilian> недостаточно?
[18:25:13] <nis> не не то
[18:25:18] <Civilian> то что я не показываю что то, не значит что этого нет
[18:25:22] <Civilian> nis: а что тогда?
[18:25:38] <Civilian> nis: постановка задачи есть, цель есть. Декомпозиция на крупные блоки (5-6 классов) есть
[18:25:48] <nis> вот у тебя задача не просто скушать кучу данных, а ещё и разработать
[18:25:51] <Civilian> и разрисовано кто что куда шлет
[18:25:55] <nis> а классы это уже последний этап
[18:26:19] <Civilian> nis: ну у меня есть диаграмма того что приходит на вход, как это путешествует между большими кусками и то что в итоге должно получиться
[18:26:22] <Civilian> как на диске, так и юзеру
[18:26:26] <Civilian> что не хватает?
[18:26:47] <nis> диаграмма это понятно
[18:27:00] <Civilian> nis: а чего нехватает?
[18:27:09] <nis> вот ты если знаешь какая самая затратная операция то что ты хочешь с ней делать?
[18:27:33] <nis> вот я вижу что надо параллелить разбор строки
[18:27:43] <nis> а точнее определять его в пул потоков
[18:28:05] <nis> а все остальные задачи не существенны по сравнению с ним
[18:28:14] medvedko вошёл(а) в комнату
[18:28:15] <nis> далее мы складываем эти данные
[18:28:56] <nis> причём распарсенные данные уже не так тяжелы для одного потока
[18:29:12] <nis> поэтому сбор данных можно делать и в один поток
[18:29:52] <nis> + один поток на дисковый кэш - т.к. это фоновая операция и если её сделать неблокирующей, то можно будет сильно не мучать остальную часть ПО
[18:30:15] <nis> на юзера поток нужен, но скорее это будет асинхрон от основного
[18:30:24] <nis> так проще и надёжней
[18:30:53] <Civilian> nis: ну тут оно натурально получится на самом деле
[18:31:04] <Civilian> точнее нет смысла в многопоточности если у тебя 1 TCP поток
[18:31:19] <Civilian> все равно первичный разбор прийдется делать в основном потоке, так банально быстрее
[18:31:35] <Civilian> т.к. пока ты ищешь \n почему бы не найти все пробелы
[18:31:37] <nis> ещё раз - параллелить нужно то что независимо и делается дольше всего
[18:32:05] slepnoga вышел(а) из комнаты
[18:32:11] <Civilian> nis: я думаю в этом месте архитектуру на пободии nginx'а сделать
[18:32:21] <nis> может и так
[18:32:21] <Civilian> n worker'ов по разбору
[18:32:29] <nis> что я тебе выше и сказал
[18:32:36] <Civilian> притом особенность данных такова что каждый новый поток будет слать уникальный набор метрик
[18:32:47] <Civilian> т.е. от accept'или и передали socket воркеру
[18:32:55] <Civilian> в воркере обходим сокеты и бьем на группы
[18:32:58] <Civilian> и заодно парсим
[18:33:27] <Civilian> как минимум в первой итерации
[18:33:34] <nis> Civilian: я тебе настоятельно рекомендую почитать книгу ту что скинул
[18:33:41] <Civilian> nis: почему?
[18:34:04] <nis> потому, что там описаны те ошибки которые допускают при проектировании многопоточных приложений
[18:34:22] bober2000 вошёл(а) в комнату
[18:34:33] <nis> вот у тебя от разборщика данные как будут уходить?
[18:35:47] <Civilian> nis: т.к. мне нужно обеспечить доступ к ним более чем 1 потока и хранить в памяти, то как раз я и хочу в этом месте сделать хэш с lock-free чтением
[18:36:07] <nis> ну это не обязательно
[18:36:54] <nis> т.к. бинарные данные будут иметь вес гораздо меньший чем строки
[18:37:01] <nis> и их можно будет индексировать
[18:37:02] <Civilian> nis: мне на текущий момент это видится наиболе оптимальным. Позволит сделать быстрый доступ на чтение произвольного колличества процессов
[18:37:14] <Civilian> nis: тут дело в том, что ключом является строка
[18:37:16] <Civilian> по любому
[18:37:24] <Civilian> хоть ты тресни
[18:37:35] <nis> look-free оно тебе только добавить геморроя как ни крути
[18:37:58] <Civilian> nis: если оно будет lock-based то будут ощутимые задержки на синхронизацию
[18:38:08] <nis> где?
[18:38:14] <Civilian> nis: при доступе к данным
[18:38:26] <nis> у тебя один поток выгребает из очереди данные в общий банк
[18:38:28] <Civilian> nis: еще раз - минимум два потока, которые их читают
[18:38:36] <Civilian> nis: и из общего банка читает два потока
[18:38:42] <Civilian> 1 writer, минимум 2 readerа
[18:38:42] <nis> три потока
[18:38:52] <nis> всё
[18:39:04] <nis> это не так страшно
[18:39:13] <Civilian> nis: я голосую за "минимум"
[18:39:24] <nis> я бы не стал делать больше
[18:39:25] <Civilian> т.к. то что я знаю о системах потребует более 1 ридера
[18:39:35] <Civilian> иначе упадет отзывчивость
[18:39:48] <nis> не доказано
[18:39:52] <nis> значит не факт
[18:39:54] <Civilian> nis: опыт
[18:39:58] <Civilian> он тоже важен
[18:40:02] <nis> опыт бывает и ложным
[18:40:09] <nis> нужно практическое обоснование
[18:40:17] <nis> с наглядными примерами
[18:40:20] <Civilian> nis: бывает, но поэтому я лучше реализую как считаю правильным, чем убью время на то чтобы доказать свою точку зрения
[18:40:44] <Civilian> nis: в любом случаи чтобы перейти с одной схемы на другую нужно будет ВСЁ переделать в этом месте
[18:40:55] <nis> нет
[18:41:01] <Civilian> nis: почему нет?
[18:41:09] <nis> если ты правильно сделаешь распределение обязанностей
[18:41:11] <Civilian> nis: как ты предлагаешь перейти с lock-based на lock-free?
[18:41:21] <Civilian> прийдется переделывать хранилку в этом месте
[18:41:28] <Civilian> если изначально не подумать
[18:41:29] <nis> не сильно
[18:41:33] <Civilian> ощутимо
[18:41:52] <nis> просто ты пойми look-free это ничего более чем модное слово
[18:42:06] <nis> у тебя также остаются синхры и блокировки
[18:42:11] <nis> просто теперь это атомики
[18:42:16] <nis> а атомики дорогие
[18:42:33] <nis> тем более для многопроцессорной машины
[18:43:19] <nis> в любом случае - почитай книгу, подумай
[18:43:23] <Civilian> nis: тут другая штука
[18:43:29] <nis> она займёт не более 2 недель
[18:43:35] <nis> зато ты не будет потом собирать шишки
[18:43:37] <Civilian> nis: lock-free это способ уйти от блокировок в частых случаях
[18:43:46] <nis> нет
[18:43:57] <nis> это способ пассивной блокировки
[18:44:05] <nis> и он бывает как с ожиданием так и без
[18:44:12] <Civilian> т.е. если ты знаешь какой тип нагрузок более характерен, ты можешь получить структуру которая работает оптимальнее в твоем случаи, чем если обернешь кусок кода в мьютексы
[18:44:33] <nis> ну если ты уверен как создатель то да
[18:44:42] <Civilian> nis: и мьютекс в линуксе это syscall
[18:44:44] <nis> а так ты получаешь кучу кода и геморроя
[18:44:48] <Civilian> который почти также дорог как атомик
[18:44:57] <Civilian> немногим дешевле
[18:45:01] <nis> вот
[18:45:06] <nis> в том то вся и фишка
[18:45:12] <Civilian> и плюс оверхед на мьютекс внутри ОС
[18:45:15] <Civilian> на его реализацию
[18:45:25] <nis> а теперь представь что у тебя одних только атомиков больше 1000
[18:45:34] <Civilian> nis: у меня не будет их столько
[18:45:58] <nis> если ты не знаешь как это у тебя работает то возможен и такой вариант
[18:46:29] <Civilian> nis: из моих представлений получается что атомиков будет по колличеству тредов
[18:46:38] <nis> не совсем
[18:47:02] <nis> у тебя вся структура должна быть синхронна
[18:47:34] <nis> + такая подлость как удаление
[18:49:56] <Civilian> nis: их не будет 1000, оно будет пропорционально тредам
[19:01:13] 0xd34df00d вышел(а) из комнаты: Disconnected: closed
[19:01:36] 0xd34df00d вошёл(а) в комнату
[19:10:20] maxggxam вышел(а) из комнаты: Вышел из Vacuum-IM
[19:11:25] maxggxam вошёл(а) в комнату
[19:14:22] evadim вышел(а) из комнаты
[19:24:02] <nis> Civilian: ну насчёт одновременно да
[19:24:18] <nis> а в случае нрационального расхода их может быть сколько угодно
[19:24:20] <Civilian> nis: мест которые нужно блокировать
[19:24:40] <Civilian> nis: еще раз, я не дебил
[19:24:46] <Civilian> ну или не настолько дебил
[19:24:53] <nis> никто и не говорит
[19:25:06] <Civilian> nis: в смысле я знаю что ничего не бывает бесплатно
[19:25:11] <nis> просто, у тебя на мой взгляд непонимание некоторых концепций многопоточности
[19:25:21] <Civilian> nis: в чем именно?
[19:25:23] <Civilian> раскрой мысль
[19:25:41] <nis> ну например в том что реально стоит делать многопоточным
[19:25:52] <nis> а что должно становится синхронным
[19:25:59] <Civilian> nis: я представляю что именно - то что может быть блокирующим и что жрет цпу
[19:26:11] <Civilian> я так в итоге и сделаю
[19:26:24] <nis> ок, как знаешь
[19:26:34] <Civilian> nis: ну а что не так?
[19:26:49] <nis> всё
[19:27:03] <nis> начиная с основ
[19:27:11] <nis> заканчивая верой в look-free
[19:27:29] <nis> т.к. ты даже не опеределился какой из этих look-free у тебя будет
[19:27:47] <Civilian> nis: я знаю требования, я не знаю ничего о алгоритмах.
[19:27:48] <0xd34df00d> Поел говна с хаскелем.
[19:27:50] <0xd34df00d> :(
[19:27:59] <Civilian> nis: подробнее еще раскрой мысль, пожалуйста
[19:28:05] <nis> и почему именно хэш
[19:28:33] <nis> Civilian: ты думаешь что look-free решит твои проблемы
[19:28:35] <nis> это не так
[19:28:46] <nis> он только добавит кода и увеличит сложность
[19:28:50] <Civilian> nis: предложи более эффективную структуру данных, которая позволит при запросе "дай мне метрику с именем server_name.metric_math.metric_name" быть более эффективным
[19:29:29] <nis> древо
[19:29:36] <Civilian> nis: в каком виде?
[19:29:45] <Civilian> nis: в хэше поиск O(1)
[19:29:52] <Civilian> best-case
[19:29:59] <Civilian> в дереве log(N)
[19:30:02] <nis> а расчёт хеша?
[19:30:12] <Civilian> nis: а тебе в дереве тоже прийдется считать что-то
[19:30:16] <nis> нет
[19:30:25] <nis> только при добавлении новых элементов
[19:30:47] <Civilian> nis: при поиске как быть? У тебя вход - строка
[19:30:52] <nis> выборку старого можно сделать тем же ключом
[19:31:00] <nis> вот у тебя что такое метрика?
[19:31:14] <nis> строка?
[19:31:39] Desu вошёл(а) в комнату
[19:31:46] <Civilian> имя метрики - строка
[19:31:52] <nis> вот
[19:32:02] <nis> это уже позволяет построит дерево
[19:32:19] <nis> где каждый символ - ветвь
[19:32:32] <nis> итого при оптимизации не считаем хэш
[19:32:52] <nis> а если сбалансировать то вообще нормальная скорость
[19:33:08] <Civilian> nis: минусы могу сказать
[19:33:21] <nis> Civilian: возьми Сейджвика
[19:33:23] <Civilian> nis: если это будет хэш-списков то я смогу это "как есть" передать клиенту
[19:33:28] <Civilian> и он отобразит это
[19:33:36] <Civilian> более того - структура данных на диске тоже список
[19:33:42] <Civilian> поэтому в писалку я могу передать данные как есть
[19:33:46] <Civilian> притом еще и range их
[19:33:52] <nis> да да да
[19:34:12] <Civilian> nis: с деревом нужны доп. преобразования будут
[19:34:54] <nis> ты сначала посмотри у того же Сейджвика как оно работает
[19:34:57] <nis> а потом говори
[19:34:57] <Civilian> лучше использовать чуть менее оптимальный способ чтения от клиента
[19:35:13] <Civilian> nis: ну проспойлери как
[19:35:40] <nis> + хэш на таком размере будет чуть более чем неоптимален
[19:35:46] <Civilian> nis: мне чтение от клиента (оптимальность) чуть менее важно чем отдать данные в готовом для употребления виде и возможность потоку осуществляющему запись не делать много работы
[19:35:47] <nis> у тебя сколько ключей?
[19:35:53] <Civilian> nis: допустим миллион
[19:36:09] <nis> выкидывай хэш
[19:36:12] <Civilian> можно на порядок увеличить
[19:36:15] <Civilian> nis: почему?
[19:36:26] <Civilian> nis: объясни
[19:39:18] CarelessChaser вышел(а) из комнаты
[19:39:39] <Civilian> nis: хэш в такой ситуации сведется к довольно простой структуре, которую будет просто писать и просто отдавать
[19:56:02] <nis> Civilian: а то что при таком количестве записей время поиска будет уже линейным
[19:58:40] <nis> Civilian: https://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0
[19:59:31] <nis> Civilian: Но при этом не гарантируется, что время выполнения отдельной операции мало́.
[20:01:00] <Civilian> nis: я знаю что время хэширования оно существенно, да
[20:01:24] <Civilian> nis: но оно нужно только на этапе определения куда писать. В принципе никто не мешает в будущем в этом месте сделать "кэш" хэшей
[20:01:28] <nis> Civilian: http://stackoverflow.com/questions/6820734/c-storing-up-to-a-million-entries-in-a-hash-table
[20:01:30] <Civilian> в вище как раз таки дерева, как ты сказал
[20:01:36] <nis> вот посмотри
[20:01:46] <Civilian> nis: но хэш мне поможет упростить запись данных
[20:01:48] <nis> там как раз объясняет кто что использует
[20:02:31] <Civilian> nis: я бегло проглядел - пока все ожидаемо
[20:03:21] <nis> с ростом количества ключей возрастает время расчёта хэш-суммы
[20:04:24] CarelessChaser вошёл(а) в комнату
[20:07:38] <Civilian> nis: см выше, кто мешает ради оптимизации сделать кэш хэш-сумм?
[20:07:51] <Civilian> nis: ваще пиши еще что думаешь, я пойду погуляю
[20:08:06] <nis> кто мешает подумать прежде чем делать...
[20:08:51] <Civilian> nis: потому что я достаточно сильно уверен в том что O(1) поиска в хэше лучше чем log(длинна) в дереве
[20:08:59] <Civilian> в общем случаи
[20:09:16] <Civilian> nis: даже с учетом O(длинны) вычисления хэша
[20:09:37] <Civilian> почему? да потому что это упростит логику работы с данными потом
[20:09:58] <Civilian> я ушел, пиши еще если что
[20:10:09] <Civilian> nis: а мешает простой факт - думать можно вечно
[20:10:26] <nis> ну в общем дело твоё
[20:10:29] <Civilian> иногда надо принять решение не продумав на 100%
[20:10:54] <Civilian> т.к. в противном случаи поделка станет бессмысленной
[20:18:07] nordwind вошёл(а) в комнату
[20:24:42] nordwind вышел(а) из комнаты
[20:27:10] Интеллект вошёл(а) в комнату
[20:31:39] medvedko вышел(а) из комнаты
[20:37:11] krigstask вышел(а) из комнаты
[20:41:45] maksbotan вошёл(а) в комнату
[20:43:38] edgbla вошёл(а) в комнату
[20:58:10] nis вышел(а) из комнаты
[21:17:45] Night Nord вошёл(а) в комнату
[21:31:39] krigstask вошёл(а) в комнату
[21:57:32] evadim вышел(а) из комнаты
[22:15:28] ASM вышел(а) из комнаты
[23:00:34] bober2000 вышел(а) из комнаты
[23:10:32] 0xd34df00d вышел(а) из комнаты: Client went to sleep
[23:10:42] 0xd34df00d вошёл(а) в комнату
[23:12:18] diko вошёл(а) в комнату
[23:18:38] edgbla вышел(а) из комнаты
[23:28:05] ruda вышел(а) из комнаты
[23:28:47] ruda вошёл(а) в комнату
[23:30:06] smalker вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!