@ru_python

Страница 732 из 9768
Andrei
13.05.2016
15:43:20
switchfiber + iocp + apc

Roman
13.05.2016
15:43:24
blocking, nonblocking, asynchronous?
последнего в linux/freebsd нет для сокетов.

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
только плюсовый
а чем не понравился какой-нибудь boost::asio ?

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
Нужны были корутины
ну так сейчас для этого дичайше крут golang.

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

Там было всё вылизано по максимуму.

Roman
13.05.2016
15:48:48
и асинхронное ио
увы, в *nix оно есть долько для обычных файлов.

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
Интересно стелишь. Сам реализовывал? А задача какая была?

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
Но это уже был оверкилл, в итоге остановился на связках ucontext_t +epoll
ну а как ты решал вопрос с переключением короутин?

Andrei
13.05.2016
15:51:30
swapcontext

Roman
13.05.2016
15:51:47
swapcontext
ну да, это всё уже есть в uwsgi :)

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
его user-data
а, всё. понял.

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

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
Я плюсер, если честно, про питон ничего не знаю почти, а сюда зашел, потому что мне разрекламировали, что тут за хаскелль разговоры :D
хехе... ну если кратко, в eventlet много буккипинга: храним хештаблицу fd => короутина и при событии бежим смотреть куда нам прыгнуть.

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
gevent + c-ares.
спасибо, похоже это то что нужно

Roman
13.05.2016
16:01:39
спасибо, похоже это то что нужно
ну тебе надо бы сначала делать gethostbyname/getaddrinfo

оно быстрее, чем если делать честный 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
Я не помнюуже. Но да, там очень странно всё равно это с раскладкой по времени.
ну я мерил для linux. там четкая корелляция для /sys/block/{blockdev}/stat

точнее, с выхлопом iostat в полях r_await/w_await

Dan
13.05.2016
16:11:13
Вот что нашёл: https://github.com/gwik/geventhttpclient

хорошая годная вещь?

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 Рома отдельное спасибо )

Страница 732 из 9768