
Yegor
11.02.2017
13:02:53
Сишным

Nikolay
11.02.2017
13:04:05

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

Google

Nikolay
11.02.2017
13:04:13
но да
там асинхронные коллбэки обычные
не мешай все в кучу

Yegor
11.02.2017
13:04:53
Да ты походу эксперт

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
не позорься уже

Yegor
11.02.2017
13:07:05

Nikolay
11.02.2017
13:07:17

Yegor
11.02.2017
13:07:21

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

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

Nikolay
11.02.2017
13:08:34

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

Nikolay
11.02.2017
13:09:13

Yegor
11.02.2017
13:10:03
Ты походу в универе не учился нормальном

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

Yegor
11.02.2017
13:10:44

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 корутин

Aleksandr
11.02.2017
13:11:17

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

Yegor
11.02.2017
13:13:25
Которые шедуляться ядром
Иначе ты бы не мог мультиплексировать с сокета

Nikolay
11.02.2017
13:15:37
почитай, как работает epoll
никаких тредов там нет и в помине
потому что они не нужны в этой задаче

Aleksandr
11.02.2017
13:16:05

Yegor
11.02.2017
13:16:36

Nikolay
11.02.2017
13:16:46

Aleksandr
11.02.2017
13:17:09

Yegor
11.02.2017
13:17:46

Nikolay
11.02.2017
13:18:25

Google

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

Aleksandr
11.02.2017
13:19:10
хотя я уже потерял мысь, о чём спор )

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

Yegor
11.02.2017
13:19:54

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

Yegor
11.02.2017
13:20:20
Скину тебе

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
То что в юзер спейсе (условно говоря) ты не создаешь поток, не значит что его нет.
Как минимум всегда есть кернел треды и в случае ноды есть пул воркеров.

Nikolay
11.02.2017
13:24:08

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

Nikolay
11.02.2017
13:24:53
для concurrency треды не нужны

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

Nikolay
11.02.2017
13:25:55
и у тебя будет один поток и в нем все отлично будет работать

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

Nikolay
11.02.2017
13:28:46