
Sergey
23.12.2016
08:37:56
стека

Vladislav
23.12.2016
08:38:44

babysitter
23.12.2016
08:38:44
Может есть в бусте что-то похожее?
я когда-то тоже гуглил. раз ты ночь гуглил, то наверное знаешь даже больше, чем я. вот эту еще находил, она вроде не такая мертвая
https://github.com/ytakano/radix_tree

Google

Дед Пегас
23.12.2016
10:30:56
https://medium.com/@phostershop/building-a-c-hybrid-spin-mutex-f98de535b4ac#.6lf3aanpb

Square
23.12.2016
11:39:08
а вот тут рекомендую про локфри, атомики и скорость!
http://moodycamel.com/blog/2014/detailed-design-of-a-lock-free-queue

Alex Фэils?︙
23.12.2016
11:48:06

Evgeniy
23.12.2016
11:51:31

Mikhail
23.12.2016
11:53:32
Личное мое имхо. Чем возиться с этими lock free структурами данных проще разобраться как реализовывать кооперативную многозадачность на плюсах и делать количество потоков равное количество ядер, и каждое независимо от другого. А внутри потоков все раскинуто по эвентам.
А так эти лок фрии структуры поощеряют потоковый ад внутри приложения

Artem
23.12.2016
11:54:18
https://twitter.com/HookTM/status/807622367144865793

Square
23.12.2016
14:09:38
Когда тебе надо чертовски быстро

Mikhail
23.12.2016
14:18:15
Ну во первых не нужно данные между потоками гонять

Square
23.12.2016
14:18:18
А вообще мне атомики полюбились, особенно если билдить интеловским компилем - на xeon'ах в 2-3 раза быстрее

Google

Mikhail
23.12.2016
14:19:06
а во вторых не встречал я такие задачи, в которых обычные мьютексы не прокатят

Square
23.12.2016
14:21:24
Но если задача выжать максимум из железа
Например разбирать 10ge на лету :D
Я поделился тем, что считаю достойным
А статья там реально годная

Mikhail
23.12.2016
14:24:23
Хорошо, допустим что тебе нужна максимальная производительность. Во первых, если количество потоков больше количества ядер - ты быдешь тратить дополнительное время на переключение процесса. Во вторых, у ядер процессора нет доступа напрямую ко всей оперативной памяти, есть только свой участок, или его вообще нет, и тогда он обращается к памяти через соседнее ядро.

Alex Фэils?︙
23.12.2016
14:24:42

Mikhail
23.12.2016
14:24:46
И хорошо если требуемая память будет в прямом доступе у соседнего ядра, а не у еще соседнего

Artem
23.12.2016
14:24:47
была у меня схожая задача. Нормальная буферизация по писателям + мьютексы победили решение с локфри

Alex Фэils?︙
23.12.2016
14:25:12

Square
23.12.2016
14:26:08

Mikhail
23.12.2016
14:26:20
о. второе - это же нума
Так и что? Я к тому, что если ты шаришь данные между потоками, эти данные все равно будут находить я определенном доступе ядра. А если ты создашь несколько потоков на одном ядре, будешь терять время на переключение контекста

Alex Фэils?︙
23.12.2016
14:26:30
дак я не спорю)

Mikhail
23.12.2016
14:26:46
в то время как кооперативная многозадочность эти проблемы не создает

Alex Фэils?︙
23.12.2016
14:27:12
можно совместить N тредов на N ядер и локфри

Mikhail
23.12.2016
14:27:15

Alex Фэils?︙
23.12.2016
14:27:31
достойный компромисс)

Google

Mikhail
23.12.2016
14:27:53
Речь шла о максимальной производительности

Square
23.12.2016
14:28:07
Ибо hyperthreading

Mikhail
23.12.2016
14:28:40
так вот она доступна только при количестве ядер равное количеству потоков и отсутсвия общих данных между потоками

Alexey
23.12.2016
14:28:44

Mikhail
23.12.2016
14:29:00

Square
23.12.2016
14:29:05

Mikhail
23.12.2016
14:29:12
Определенный поток определенному ядру

Alexey
23.12.2016
14:29:13

Mikhail
23.12.2016
14:29:17
и потоки

Square
23.12.2016
14:29:23
Affinity*

Mikhail
23.12.2016
14:29:36
по крайней мере через апи системы точно
как там в современном с++ не знаю

Alexey
23.12.2016
14:30:24

Mikhail
23.12.2016
14:30:31

Alexey
23.12.2016
14:32:57
И что?
а то что нужно очень хорошо понимать что ты делаешь, когда начинаешь думать, что ты понимаешь лучше системного шедулера, что где хендлить

Mikhail
23.12.2016
14:34:22
чот не понял мысль
я не собираюсь ничего шедулить

Admin
ERROR: S client not available

Google

Alexey
23.12.2016
14:35:16

Square
23.12.2016
14:37:55
Там продюсер-консюмер было?

Artem
23.12.2016
14:38:26
Малтипл-малтипл

Square
23.12.2016
14:38:49
А, это сложно конечно
У нас все весьма хитро. Как правило, один пишущий и много читающих
И много грязных хаков...
Например минимум аллокейтов)

Artem
23.12.2016
14:40:55
зачем вам вообще аллокейты

Square
23.12.2016
14:41:04
Циклические буферы и тп

Artem
23.12.2016
14:41:23
у нас был циклический буфер в разделяемой памяти, побитый на чанки

Square
23.12.2016
14:42:06
Мне кажется все кто через это проходит - в итоге рожают примерно похожие решения

Mikhail
23.12.2016
16:13:20
Кто нибудь в курсе, когда закрываешь окно консоли в венде, какой то сигнал посылается?

Andrei
23.12.2016
16:16:39
Но по-хорошему в винде лучше на это не расчитывать.

Mikhail
23.12.2016
16:17:16
ну я сигинт обрабатываю и логика не срабатывает
когда закрываю окно
я тут нарыл еще CTRL_CLOSE_EVENT

Google

Mikhail
23.12.2016
16:17:40
нужно выставлять в SetConsoleCtrlHandler

Andrei
23.12.2016
16:17:56
Да, вот это уже на правду похоже.

Mikhail
23.12.2016
16:18:56
Ну я так и выставляю и логика не отрабатывает все равно
похоже и правда нельзя рассчитывать

Stanislav
23.12.2016
16:27:28

Mikhail
23.12.2016
16:31:43
Обработчик указываю в SetConsoleCtrlHandler
и в нем проверяю на соотвествие сигналу, в том числе CTRL_CLOSE_EVENT

Alex Фэils?︙
23.12.2016
20:49:30