@ProCxx

Страница 491 из 2477
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
https://medium.com/@phostershop/building-a-c-hybrid-spin-mutex-f98de535b4ac#.6lf3aanpb
преамбула агонь!) да и статья доставляет. мне вообще многопточные штуки нравятся всякие

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

Evgeniy
23.12.2016
11:51:31
? #lockfree #concurrency
Вот это серия хороша кстати https://habrahabr.ru/post/314948/

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
а во вторых не встречал я такие задачи, в которых обычные мьютексы не прокатят
мьютексы да, но они обычно много переключений контекста требуют. Поэтому придумывают fast mutexes, lock-free data types и прочую ересь)

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

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

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 ядер и локфри

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

Google
Mikhail
23.12.2016
14:27:53
можно совместить N тредов на N ядер и локфри
Ну я же уже сказал, если у тебя будет количество потоков больше чем количество ядер, будешь терять на переключение контекста

Речь шла о максимальной производительности

Square
23.12.2016
14:28:07
можно совместить N тредов на N ядер и локфри
Потоки только на нечётных ядрах запускаю :)

Ибо hyperthreading

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

Alexey
23.12.2016
14:28:44
Ну я же уже сказал, если у тебя будет количество потоков больше чем количество ядер, будешь терять на переключение контекста
так стоп.. а кто сказал, что если у тебя 16 потокв и 16 ядер, то тебе достанется каждому потоку по ядру

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
по крайней мере через апи системы точно
ты в любом случае такие вещи будешь делать через апи системы

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
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
Ну я так и выставляю и логика не отрабатывает все равно

похоже и правда нельзя рассчитывать

Mikhail
23.12.2016
16:31:43
Обработчик указываю в SetConsoleCtrlHandler

и в нем проверяю на соотвествие сигналу, в том числе CTRL_CLOSE_EVENT

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

Страница 491 из 2477