
Andrei
13.05.2016
15:43:20
switchfiber + iocp + apc

Roman
13.05.2016
15:43:24

Andrei
13.05.2016
15:44:07
если swtichfiber не нравится пишется свой аналог ucontext_t и get\swap
на ассемблере в 30 строчек

Google

Andrei
13.05.2016
15:44:44
но файберов виндовых хватает
и оверлапд IO

Roman
13.05.2016
15:45:26

Andrei
13.05.2016
15:45:39
Мы говорим про сервера.
еще пару лет назад серверная винда была повсеместно, сейчас поровну между линуксом, виндой и бсд

Roman
13.05.2016
15:46:17

Andrei
13.05.2016
15:46:45
я писал просто можно сказать аналог libev
только плюсовый

Roman
13.05.2016
15:47:10

Andrei
13.05.2016
15:47:21
>boost во-первых
во-вторых медленее

[Anonymous]
13.05.2016
15:47:29

Andrei
13.05.2016
15:47:30
чем то, что написал

Google

Andrei
13.05.2016
15:47:46
Нужны были корутины
и асинхронное ио

Roman
13.05.2016
15:48:12

Andrei
13.05.2016
15:48:28
Всё равно медленнее, чем собственный код.
Там было всё вылизано по максимуму.

Roman
13.05.2016
15:48:48

Andrei
13.05.2016
15:49:10
Интересовала больше сеть, нежели чем файловое aio
Ну и на самом деле гарантий на AIO нет никаких на файловое
система все равно может блочить read\write

Roman
13.05.2016
15:49:49
ну и опять же, если цель - максимальная производительность, то тут на сцену выходят всякие dpdk/netmap

[Anonymous]
13.05.2016
15:49:50
Интересно стелишь. Сам реализовывал? А задача какая была?

Andrei
13.05.2016
15:50:14

Roman
13.05.2016
15:50:39
а при определённом железе - onload

Andrei
13.05.2016
15:50:44
Но это уже был оверкилл, в итоге остановился на связках ucontext_t +epoll
свой асм на маке + kqeue
ну и fiber+iocp на винде

Roman
13.05.2016
15:51:15

Andrei
13.05.2016
15:51:30
swapcontext

Roman
13.05.2016
15:51:47

Andrei
13.05.2016
15:52:01
обычный юзер мод свитч

Google

Andrei
13.05.2016
15:52:11
по замерам около 20 нс на переключение контекста.
если FPU preserve то еще 10 нс

Roman
13.05.2016
15:52:34
но тут вопрос в другом: вот у тебя операция чтения из сокета, тебе прилетает EAGAIN - тебе надо добавить сокет с epoll с маской POLLIN
если была запись - то с маской POLLOUT

Andrei
13.05.2016
15:53:12
Ооо, ладно, щас, ты читал libev девблог? как они там охуевали с дермового дизайна epoll-а?
Ну вот, я тоже.

Maksim
13.05.2016
15:53:23
https://www.facebook.com/julia.ploskonosova.9/posts/589628884547058

Roman
13.05.2016
15:53:26
вопрос в том, что тебе надо трекать последнюю io-операцию в короутине, на которой прилетел EAGAIN

Andrei
13.05.2016
15:53:39
Ща-ща-ща
Когда в еполл кладется эвент
его user-data
это указатель на структуру с прерванной корутиной

Andrei
13.05.2016
15:54:17
когда оно вытягивается из epoll_wait
следующей же инструкцией мы идёт в корутину

Roman
13.05.2016
15:54:48

Andrei
13.05.2016
15:55:31
соотв любая операция read\write на соединении это на самом деле укладка указателя на текущую корутину в еполл

Roman
13.05.2016
15:55:58

Andrei
13.05.2016
15:55:59
туда же легко цепляются таймеры

Roman
13.05.2016
15:56:30
я просто смотрю на ту дичь что творится в питоновском eventlet
и мне грустно

Google

Andrei
13.05.2016
15:57:14
Я плюсер, если честно, про питон ничего не знаю почти, а сюда зашел, потому что мне разрекламировали, что тут за хаскелль разговоры :D

Roman
13.05.2016
15:58:45

Andrei
13.05.2016
15:59:14
Понял.
Жесть.
Да, очень плохо.

Roman
13.05.2016
15:59:33
и вроде только недавно добавили модификацию флагов epoll. раньше было CTL_DEL + CTL_ADD

Andrei
13.05.2016
15:59:42
Хотя я понимаю почему им так захотелось.

Roman
13.05.2016
15:59:46
никаких ONESHOT итп

Andrei
13.05.2016
16:00:02
Из-за поганого epoll-а который вешает в одино событие и read и write

Admin
ERROR: S client not available

Roman
13.05.2016
16:00:11

Andrei
13.05.2016
16:00:39
Считается, что edge_trigerred быстрее
Я не проверял, сразу писал на oneshot-ах всё
Но оно интуитивно и понятно.

Dan
13.05.2016
16:01:14

Roman
13.05.2016
16:01:39
оно быстрее, чем если делать честный connect

Andrei
13.05.2016
16:02:02
О, кстати, это весело, но не существует неблокирующих версий gethostbyname
на винде приходится заводить отдельный тред.
только для резолвера.

Google

Roman
13.05.2016
16:02:21
чтобы не заблокироваться надо проявлять чудеса изобретательности
open/stat - пиу-пиу.

Andrei
13.05.2016
16:03:17
На винде есть решение какое-то через нейтив апи, но оно очень страшное.

Roman
13.05.2016
16:03:17
запросто могут занять от десятков ms до бесконечности ))

Andrei
13.05.2016
16:03:33
Я не помнюуже. Но да, там очень странно всё равно это с раскладкой по времени.

Dan
13.05.2016
16:04:54
скажем так, есть один скриптик, кем-то написаный. который достаёт открытий json и делает красиво в gtk. не суть. реализовано ужасно криво, и самое главное, при автозапуске (а данные полезные, годные) эта софтина может подняться (если wifi поднялся раньше) или не подняться.
решил перереализовать, а там вообще странное: класс, а внутри два метода всего. и второй делает вообще всё. я понимаю что люди не парились, и сделали просто чтоб было.
но это не тру, т.к. надо же чтобы исключения обрабатывались, да и вообще

Andrei
13.05.2016
16:05:10
Там есть якобы Wsaasyncgethostbyname но на самом деле он не async
лол.

Dan
13.05.2016
16:05:15
в общем ваши идеи мне пришлись по душе, тем более что это то, с чем я хотел бы разобраться подробнее ?

Roman
13.05.2016
16:06:49
точнее, с выхлопом iostat в полях r_await/w_await

Dan
13.05.2016
16:11:13
Вот что нашёл: https://github.com/gwik/geventhttpclient
хорошая годная вещь?

Roman
13.05.2016
16:13:49

Dan
13.05.2016
16:15:00
я боюсь что не смогу ответить на этот вопрос...
потому что я как минимум дважды довольно подробно описал что хочу ?
а тут я ищу реальные практики из жизни подобных примеров. кто как решал такие задачи
ясно. к чёрту питон. забыли. кто как реализовывал многопоточные парсеры на хаскеле за последний месяц? ))

fox.hs
13.05.2016
16:22:00
Как я понял, Haskell - это не широко распространенный ЯП?

Andrey
13.05.2016
16:23:34
он широко распространен в срачиках, но не в продакшене

Dan
13.05.2016
16:24:57
за c-ares Рома отдельное спасибо )