
Surreal
09.01.2017
09:52:30
Reindex.. please wait

Сергей
09.01.2017
09:55:45
Возвращаясь к сегодняшней теме. Посмотрите реализацию / интерфейс / тесты с асио
https://github.com/inkooboo/thread-pool-cpp
Кто что думает?
Использует MPMCBoundedQueue, как я понял

Square
09.01.2017
10:02:40
@JegernOUTT
https://github.com/bloomen/cxxpool/blob/master/src/cxxpool.h

Google

Aidar
09.01.2017
10:03:10

Square
09.01.2017
10:03:11
Ну вот сходу гуглится тредпул в хашнике

Surreal
09.01.2017
10:04:30

Aidar
09.01.2017
10:04:39
Там с пулом

Surreal
09.01.2017
10:04:51
Reindex.. please wait
Reindex.. please wait

Anatoly
09.01.2017
10:40:46
Трудоемкость алгоритма где for в for и все это в while, конеш аховая, но бывает надо наверное, да

Aidar
09.01.2017
10:54:07
Мне нужно обработатьребра полного графа так что пофигу
И это в цикле делать

Andrei
09.01.2017
12:20:15
За нативные надо, за компиляторные стейтлесс не надо.
Но в обоих случаях быстрее чем треды, разумеется.

Google

Andrei
09.01.2017
12:30:04
Взяли обычную блокирующую очередь, добавили в пуш trylock, прикрутили тредпул и написали всяких штук, которые просто в стандарте не сделали типа then
Разве так любая контора которая на плюсах пишет не делает сама?

Сергей
09.01.2017
12:32:33
Хотя нет, я перепутал с другой библиотекой)
Там повыше есть одна примитивная
https://github.com/bloomen/cxxpool/blob/master/src/cxxpool.h

Andrei
09.01.2017
12:35:49
Не, это реально на коленке, я про адобовскую.

Surreal
09.01.2017
12:35:56

Andrei
09.01.2017
12:36:15
функциональности*
Да нет, ничего не ждать, просто к ней было такое вступление текстовое, как будто это brand new решение.

Surreal
09.01.2017
12:37:16

Andrei
09.01.2017
12:37:28
А на самом деле это просто то, как должно было быть изначально сделано в плюсах.
Это хорошее решение. Сам так делал.
Хотя в итоге всё равно сделал корутины.
Ажно в 2014-15

Сергей
09.01.2017
12:39:48
поделись? просто посмотреть красоту реализации корутин

Andrei
09.01.2017
12:40:26
No way :D
Строжайший NDA

Сергей
09.01.2017
12:40:49

Andrei
09.01.2017
12:40:52
Это стало core-либой в одной компании, которая занимается HFT

Google

Andrei
09.01.2017
12:40:57
Не.
Хедж-фонд.
Который 10% дневного оборота на фондовых рынках в РФ проворачивает.

Сергей
09.01.2017
12:42:43
Ты на boost context с нуля корутины делал? или готовые брал?

Andrei
09.01.2017
12:42:51
Лол.
Ни то, ни другое.
Я их вообще с нуля делал.
Буст контекст в 2014 еще работал очень хуёво. Только время на него потратил.
Не знаю как сейчас.
Мне надо было сдлеать кросплатформенные кортуины.
Под виндой это были файберы. На линуксе это был ucontext_t
И соотв. вызовы.

Andrei
09.01.2017
12:44:55
На маке ни того, ни другого, пришлось написать на ассемблер гет и сет контекстов.

Сергей
09.01.2017
12:45:16
понятно. и много времени на это всё ушло?

Andrei
09.01.2017
12:45:27
20 нс на контекст свитч зато.
Где-то 4 месяца from scratch
Я писал для мака и линукса и второй разработчик для винды.
В итоге был библиотека корутин, совмещенная с асинхронным ио
IOCP в винде, epoll в линуксе и kqueue в Mac
Довольно забавно видеть было выступление Гора Нишанова в 2016 году с его TcpConnection классом на корутинах и await-ах, когда ты сам это уже писал два года назад.

Google

Сергей
09.01.2017
12:49:30
Ну вот, теперь ты меня смутил. Тоже хочу корутины. Только готовые) пойду смотреть boost

Andrei
09.01.2017
12:50:07
Но это стейтфул корутины. Они конечно всё равно быстрые, 20 нс, как я уже сказал, но это не зиро-оверхед.
Есть настоящий зиро-оверхед, но его только компилятор может сделать.
Это следующий шаг и гораздо более непростой, но я вот как раз этим занят :D
Разрабатываю дизайн языка для одного проекта стороннего, где будут корутины из коробки стейтлесс в компиляторе.

Дед Пегас
09.01.2017
12:57:47
Там ещё быстрей.
Чучуть, но шустрей Intel.

Monday Begins on Saturday
09.01.2017
13:27:06
Кто-нибудь с epoll и сокетами работал тут?
Это нормально будет, если я создам cпомощью epoll_create(1) один epoll дескриптор и из кучи потоков подпишусь на него через epoll_wait?
На стэке пишут что ок, но как-то это ненадёжно выглядит

Admin
ERROR: S client not available

Monday Begins on Saturday
09.01.2017
13:27:33
http://stackoverflow.com/questions/12481245/epoll-wait-on-several-threads-faster

Andrei
09.01.2017
13:28:22
Это ок.
Хотя вопрос в чём?
Да, epoll_wait тредсейфный.

Monday Begins on Saturday
09.01.2017
13:29:36

Andrei
09.01.2017
13:30:25
А, ну смотри, ты разницу межде edge-triggered и level-triggered понимаешь?
Эдж срабатывает по фронту сигнала, левел срабатывает и держится пока сигнал есть.
В данном случае сигнал — это готовность сокета.
еполл это очередь.

Google

Andrei
09.01.2017
13:31:56
Если у тебя ET, то ты вытащишь из еполла гарантированно один раз.
сокет
А вот если LT
То может случить и так, что два треда вытащат один и тот же сокет.
Естественно предполагается, что у тебя O_NONBLOCK сокеты.

Monday Begins on Saturday
09.01.2017
13:34:42
?спасибо. А нельзя сделать так что бы дескрипторы которые попали в один тред оставались только там?
Т.е. я подписался через epoll на сокет, он мне насоздавал соединений. Я прочитал из сокетов и решил в них записать данные. Но готовность на запись может прийти в другой поток ведь так?

Andrei
09.01.2017
13:35:19
Да, это так.
А что, ты хочешь чтобы у тебя тред простаивал, пока не будет доступна запись?
В чем выигрыш от еполла тогда?
Он не для такой архитектуры :)

Monday Begins on Saturday
09.01.2017
13:37:31
У меня просто такой алгоритм:
1. клиент отправляет данные
2. Подсчитывается хэш сумма и отправляется в ответе клиенту.
Думаю через одно соединение это сделать как раз ок

Andrei
09.01.2017
13:38:51
Понятно, ну ты всегда можешь удалить из еполла свой сокет.

Monday Begins on Saturday
09.01.2017
13:39:25

Andrei
09.01.2017
13:39:52
Бррр.
Ты хочешь от треда слишком много.
Тебе пришло соединение, тред прочел данные и начал считать хеш.
Он в этот момент занят, так?

Monday Begins on Saturday
09.01.2017
13:41:04
Ага, получается что так. Я херню сказал)
Наверное, лучше разбить треды на несколько групп? Один принимает соединения, другой читает, третий пишет?

Andrei
09.01.2017
13:42:59
Еще лучше их сделать корутинами :D
Но да.
Лучше пусть твоя долгая операция подсчета хеша не смешивается с чтением и записью данных.

Monday Begins on Saturday
09.01.2017
13:44:13
Эх. Я просто подумал что раз epoll thread-safe, то я всю эту штуку без блокировок как-то смогу сделать :D