@devops_ru

Страница 2272 из 4568
Yegor
11.02.2017
13:02:53
если тебе нужен быстрый асинхронный код - си тебе не нужны
Ага, только нода и твой gevent это обвёртка над libevent

Сишным

Yegor
11.02.2017
13:04:05
С однопоточным интерпретатором который делегирует таски пулу тредов из libevent

Google
Nikolay
11.02.2017
13:04:13
но да

там асинхронные коллбэки обычные

не мешай все в кучу

Yegor
11.02.2017
13:04:53
нет, треды тут ни при чем
Concurrency, треды не при чем

Да ты походу эксперт

Nikolay
11.02.2017
13:05:00
Yegor
11.02.2017
13:05:20
А как по твоему нода не блокируется полностью при запросе в базу?

Nikolay
11.02.2017
13:05:21
если ты считаешь, что для concurrency нужны треды - иди читай матчасть

Yegor
11.02.2017
13:05:42
Nikolay
11.02.2017
13:05:43
А как по твоему нода не блокируется полностью при запросе в базу?
понятия не имею, но это необязательно связано с тредами

Ты походу только читал, а не писал
у меня несколько статей в журналах про асинхронность, дядя

иди расскажи кому другому

Google
Yegor
11.02.2017
13:06:00
понятия не имею, но это необязательно связано с тредами
Ты даун? Все в итоге к тредам и сводиться

Nikolay
11.02.2017
13:06:16
Ты даун? Все в итоге к тредам и сводиться
понятно все с тобой. Идиот. прекращаю разговор

Yegor
11.02.2017
13:06:24
Если не понимаешь как под капотом все работает то нечего выёживаться

Про асинхронность любой хипстерок пишет сегодня

Nikolay
11.02.2017
13:06:58
Если не понимаешь как под капотом все работает то нечего выёживаться
под капотом оно работает так, что треды тут ни при чем вообще

не позорься уже

Nikolay
11.02.2017
13:07:17
Лол
вот именно

Nikolay
11.02.2017
13:07:54
слушай, либо ты слушаешь, как оно есть на самом деле, либо я перестаю обсуждать эту тему с тобой, потому что ты нуб и не знаешь основ

выбирай

Yegor
11.02.2017
13:08:03
вот именно
Расскажи мне как работает nodejs тогда) без тредов

Nikolay
11.02.2017
13:08:34
Расскажи мне как работает nodejs тогда) без тредов
я не знаю точно, как оно работает в nodejs, я могу рассказать про питон. И треды там не нужны для того, чтобы не зависать на работе с базой

Yegor
11.02.2017
13:08:34
То что ты не видишь их в js коде и не стартуешь руками не значит что их нет.

Nikolay
11.02.2017
13:09:13
То что ты не видишь их в js коде и не стартуешь руками не значит что их нет.
я не говорю, что их там нет. Я говорю, что утверждать, что для concurrency необходимы треды - нубство

Yegor
11.02.2017
13:10:03
я не говорю, что их там нет. Я говорю, что утверждать, что для concurrency необходимы треды - нубство
Нубство это не знать что не смотря на удобную обвязку внутри все равно треды

Ты походу в универе не учился нормальном

Nikolay
11.02.2017
13:10:19
Окей, расскажи как работает gevent/asyncio
у тебя есть системный вызов epoll/kqueue, поверх которого крутится эвентлуп, а в эвентлуп могут инжектиться асинхронные обработчики, которые назваются “сопрограммы” или “корутины” и не имеют к тредам никакого отношения

Google
Yegor
11.02.2017
13:11:03
Корутины это n:m модель

Nikolay
11.02.2017
13:11:06
и там реализуется кооперативная многозадачность, когда корутины друг другу передают управление явно, не используя примитивов синхронизации и работая в одном треде

Yegor
11.02.2017
13:11:16
n тредов и m корутин

Nikolay
11.02.2017
13:11:38
Опять все смешал в кучу
ты либо слушаешь и учишься, либо могу не рассказывать

не причем там треды

соответственно, до тех пор, как ты работаешь с чем-то внешним, используя асинхронный вызов на сокете и реагируя на события на нем, бегая лупом - треды тебе не нужны, потому что вся система блокируется только на обращении к файловому дескриптору, которое крайне быстрое

Nikolay
11.02.2017
13:15:37
почитай, как работает epoll

никаких тредов там нет и в помине

потому что они не нужны в этой задаче

Aleksandr
11.02.2017
13:16:05
Иначе ты бы не мог мультиплексировать с сокета
так как nginx или redis работает? там тоже треды?

Yegor
11.02.2017
13:16:36
так как nginx или redis работает? там тоже треды?
Там один тред который epoll/kqueue вызывает

Nikolay
11.02.2017
13:16:46
так как nginx или redis работает? там тоже треды?
ну он либо троллит, либо просто думает, что знает, а на деле далеко не Лев Толстой

Там один тред который epoll/kqueue вызывает
там вообще один тред по дефолту, больше и не нужно

Aleksandr
11.02.2017
13:17:09
Там один тред который epoll/kqueue вызывает
а почему в той же ноде не так?

Yegor
11.02.2017
13:17:46
а почему в той же ноде не так?
Потому что там ещё есть пулл потоков

Nikolay
11.02.2017
13:18:25
Потому что там ещё есть пулл потоков
ага, еще расскажи, что нода для обслуживания 100к пользователей создает 100к потоков

Google
Nikolay
11.02.2017
13:18:29
ну смешно

Aleksandr
11.02.2017
13:19:10
Потому что там ещё есть пулл потоков
ага. то есть эвентлупа и epoll/kqueue там нет?

хотя я уже потерял мысь, о чём спор )

Nikolay
11.02.2017
13:19:24
последний раз объясняю - в стеке асинхронности питона (и в общем случае асиинхронности вообще) тредов нет и быть не может, потому что они там не нужны

подозреваю, что в ноде так же точно

Yegor
11.02.2017
13:19:54
ага, еще расскажи, что нода для обслуживания 100к пользователей создает 100к потоков
Я такого не говорил) V8 там в одном потоке, но ещё к этому прибавляется пул тредов, которые используются например асинхронными дравйверами баз данных

Nikolay
11.02.2017
13:20:03
если ты где-то читал иначе - приноси пруфы или смирись с тем, что ты сморозил фигню

Nikolay
11.02.2017
13:20:29
В исходниках ноды
это не пруф. Давай пруф

Yegor
11.02.2017
13:20:30
Просветишься

это не пруф. Давай пруф
Это единственный пруф

Nikolay
11.02.2017
13:20:55
В исходниках ноды
то, что в ноде есть треды, не значит, что для конкурентности нужны потоки

Yegor
11.02.2017
13:20:58
Остальное - пердежь в лужу

Nikolay
11.02.2017
13:21:01
ты можешь использовать треды и тредпул в эвентлупе, да

но по умолчанию concurrency тредов не требует

Yegor
11.02.2017
13:22:42
https://github.com/nodejs/node/blob/master/src/node.cc

Nikolay
11.02.2017
13:22:48
если ты считаешь иначе - что ж, ты неправ

Google
Yegor
11.02.2017
13:22:53
Строчка 208

То что в юзер спейсе (условно говоря) ты не создаешь поток, не значит что его нет. Как минимум всегда есть кернел треды и в случае ноды есть пул воркеров.

Yegor
11.02.2017
13:24:24
Которому ивент луп делегирует асинхронные задачи

Дальше

Идем к asyncio

Nikolay
11.02.2017
13:24:53
В ноде есть твой тред пул
в питоне он тоже есть. Но использовать его или нет - можно решать

для concurrency треды не нужны

Yegor
11.02.2017
13:25:25
в питоне он тоже есть. Но использовать его или нет - можно решать
В asyncio тоже есть тред пул, которому тоже делегируются задачи.

В результате, ты конечно можешь все в одном потоке ранить

Nikolay
11.02.2017
13:25:55
В asyncio тоже есть тред пул, которому тоже делегируются задачи.
в asyncio есть run_in_executor(). Ты можешь ему передать тредпул и запустить задачу параллельно в треде. А можешь так и не делать

и у тебя будет один поток и в нем все отлично будет работать

Yegor
11.02.2017
13:26:30
Ну вот, кроме базовых простых случаев все сводиться к тредам.

Nikolay
11.02.2017
13:26:52
наоборот

кроме отдельных хитрых кейсов треды в асинхронности не нужны в принципе

Aleksandr
11.02.2017
13:27:49
ну эвентлуп в ноде же - single threaded

https://nodesource.com/blog/understanding-the-nodejs-event-loop/

Yegor
11.02.2017
13:28:33
ну эвентлуп в ноде же - single threaded
Сам евентлуп - да, но если надо делать IO на внешние ресурсы, то тут надо заводить пул тредов как это сделали в ноде.

Страница 2272 из 4568