@ProCxx

Страница 505 из 2477
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
Reindex.. please wait
Вместо ГОрутин

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

Surreal
09.01.2017
10:04:30
Вместо ГОрутин
Reindex.. please wait

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
Reindex.. please wait
Смотря что за корутины, и что за компилятор.

За нативные надо, за компиляторные стейтлесс не надо.

Но в обоих случаях быстрее чем треды, разумеется.

Reindex.. please wait
Ваще не понял в чём прикол библиотеки.

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
Не, это реально на коленке, я про адобовскую.

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
Строжайший NDA
ты не с яндекса случайно? ?

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
Хотя вопрос в чём?
меня вот это просто насторожило "and be careful about synchronisation"

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

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