@ru_python

Страница 5753 из 9768
Nikolay
25.06.2018
16:46:54
а мы про асинхронщину говорим, это немного другое

Алексей
25.06.2018
16:47:24
(кстати, совершенно зря)
просто асинхронщина там глубоко под капотом, куда не добраться и она собственно скрыта от go программиста, и горутины действуют почти как легковесные потоки

Nikolay
25.06.2018
16:48:27
просто асинхронщина там глубоко под капотом, куда не добраться и она собственно скрыта от go программиста, и горутины действуют почти как легковесные потоки
асинхронщина там, как раз, на самом виду. Тебе не надо думать о распределении горутин по ядрам, это да, но в остальном все по концепции CSP, где в качестве событий могут быть, например, события на канале

Google
Andy
25.06.2018
16:49:27


Алексей
25.06.2018
16:49:29
там она совершенно не на виду

Nikolay
25.06.2018
16:50:27
где там асинхронщина на виду, если практически все операции там блокируют горутину и ведут себя как синхронные
взаимоисключающие параграфы. Блокируют горутину != ведут себя как синхронные, как раз наоборот. Горутина блокируется до получения события, при этом не мешая выполняться другим. Это прям асинхронность-асинхронность

Nikolay
25.06.2018
16:51:20
Ааа, то есть обычная многопоточность - это тоже асинхронщина?
нет, но поверх многопоточности можно ее реализовать

и будет да

вот в го как раз реализовали

Алексей
25.06.2018
16:51:51
Потому что замени в твоём сообщении "горутина" на поток и будет как раз многопоточность

Nikolay
25.06.2018
16:52:40
ну так это не взаимоисключающие понятия же

асинхронность можно реализовывать поверх многопоточности, что в го и сделали

Алексей
25.06.2018
16:54:32
а откуда ты знаешь что там асинхронный IO внутри?

Google
Алексей
25.06.2018
16:55:31
любой человек может написать свой go runtime с классической многопоточностью и никто и не заметит подмены (по крайней мере сразу, без задействования весьма большого количества горутин)

Алексей
25.06.2018
16:56:55
я вообще про то, что там как бы код Go абстрагирован от всей асинхронщины

Nikolay
25.06.2018
16:57:01
без мультиплексирования оно будет работать крайне медленно

но не перестанет быть асинхронным

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

та же логика

Проксимов
25.06.2018
16:58:23
Алексей
25.06.2018
16:58:29
чёт я запутался

Nikolay
25.06.2018
16:58:42
Алексей
25.06.2018
17:00:10
у меня тут утиная типизация протекла немножко походу

Nikolay
25.06.2018
17:00:16
чёт я запутался
ну, если я правильно понял твою предъяву, "по коду го не видно, что он внутри асинхронный". Так вот, встречная тема - по коду asyncio тоже непонятно, есть там потоки или нет.

Алексей
25.06.2018
17:00:47
ну это кстати скорее плюс чем минус Go

просто для меня go выглядит как синхронный язык с синхронными операциями

просто они синхронны не по отношению к потокам

а по отношению к горутинам

то есть код в горутинах полностью синхронен, там нельзя запустить две операции одновременно без создания новых горутин

выглядит как синхронный код, плавает как синхронный код, крякает как синхронный код,

Nikolay
25.06.2018
17:02:48
просто для меня go выглядит как синхронный язык с синхронными операциями
это плохо, значит, что ты не знаешь, какие там проблемы могут быть, если неправильно синхронизировать

Google
Алексей
25.06.2018
17:02:59
опять же "синхронизация" - это прям вот из многопоточности пришло

Nikolay
25.06.2018
17:03:39
чёёё?
ну, например, ты знаешь select {} в го? каким боком он похож на синхронный код?

Aragaer
25.06.2018
17:04:43
он очень синхронен

Алексей
25.06.2018
17:04:47
так select же блочит горутину

Aragaer
25.06.2018
17:04:49
такой же, как и select в позиксе

Nikolay
25.06.2018
17:05:34
так select же блочит горутину
да, блочит, и что? тебе все равно надо помнить о том, что у тебя блочится, а что нет, чтобы корректный код писать

Алексей
25.06.2018
17:06:04
но ведь в go фактически всё блочит горутину

ну кроме конечно же запуска новой горутины

Nikolay
25.06.2018
17:06:41
но горутины-то при этом параллельно работают все равно

Алексей
25.06.2018
17:06:48
как и потоки

вообще на самом деле это я запутался

Aragaer
25.06.2018
17:07:24
а про select-то тут причем? Он в каком месте "параллельно работает"?

Nikolay
25.06.2018
17:09:01
а про select-то тут причем? Он в каком месте "параллельно работает"?
ну, строго говоря, ни при чем. А если докопаться - то каким образом вообще могут приходить РАЗНЫЕ события в одну и ту же точку в коде, если код не асинхронен? то-то и оно, что никаким

Алексей
25.06.2018
17:10:08
Дело в том, что походу про асинхронность особо нет смысла говорить в отрыве от IO. К примеру в англоязычной википедии есть как раз статься про асинхронный IO. То есть не про асинхронность, а именно про асинхронный IO. И там есть три примера: блокирующий синхронный, неблокирующий синхронный, неблокирующий асинхронный. И Go как раз добавляет четвёртый и самый удобный тип: блокирующий асинхронный.

Aragaer
25.06.2018
17:10:10
позиксовый селект же как-то работает

Aragaer
25.06.2018
17:10:59
а блочится он именно на select

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

Nikolay
25.06.2018
17:11:19
позиксовый селект же как-то работает
позиксовый селект асинхронный кагбэ

Google
Nikolay
25.06.2018
17:11:47
точнее, сам по себе нет, но мультиплексирование, которое он позволяет делать - уже да

Aragaer
25.06.2018
17:11:48
ок

Алексей
25.06.2018
17:12:10
я окончательно запутался

Aragaer
25.06.2018
17:12:24
я наверно не очень понимаю разницу между "синхронным" и "асинхронным"

Nikolay
25.06.2018
17:12:56
я окончательно запутался
да что непонятно-то? есть эвентлуп, есть корутины. Есть переключение контекста явное. Есть при этом i/o или нет его - это отдельный вопрос, в общем случая для асинхронности он не нужен

Aragaer
25.06.2018
17:13:05
я привык считать событие синхронным, если я проверяю его наличие и если есть, то оно случилось, а пока нет - я о нем не знаю

Nikolay
25.06.2018
17:13:39
параллельность - это выполнение нескольких кусков кода параллельно. Асинхронность - это выполнение нескольких кусков кода НЕ последовательно, но необязательно параллельно

Aragaer
25.06.2018
17:13:46
а асинхронным, если оно может "случиться" (и требовать обработки) в любой момент времени - чем бы ни был занят мой "синхронный" код в это время

Aragaer
25.06.2018
17:14:21
ок, то есть если есть селект на два события, но порядок этих событий неизвестен, то это называется асинхронным

понял

Nikolay
25.06.2018
17:15:46
ок, то есть если есть селект на два события, но порядок этих событий неизвестен, то это называется асинхронным
если в зависимости от разных событий ты прыгаешь непоследовательно в разные части кода для обработки (читай, коллбэки) с возвратом управления при нужде - то да, это асинхронно

Алексей
25.06.2018
17:16:48
точнее не так даже

верно ли, что если мы не прыгаем непоследовательно в разные части кода для обработки, то это синхронно?

Nikolay
25.06.2018
17:18:44
только в контексте многопоточности ты прыгаешь не явно, а за тебя прыгает системный шедулер

Алексей
25.06.2018
17:19:30
то есть если я пишу на Go, без оператора select, то я пишу синхронный код?

Nikolay
25.06.2018
17:19:38
поэтому многопоточность тоже может реализовывать асинхронность

Алексей
25.06.2018
17:19:52
правда тогда прыгает шедьюлер go

Google
Nikolay
25.06.2018
17:20:10
то есть если я пишу на Go, без оператора select, то я пишу синхронный код?
если ты пишешь на go без оператора go - тогда да, у тебя синхронный код :)

но и то есть нюансы внутренние

Алексей
25.06.2018
17:20:30
уф

Aragaer
25.06.2018
17:20:51
и без селектов

Tishka17
25.06.2018
17:20:53
Вы все это время разбирали, что асинхронность перпендикулярна многопоточности?

Aragaer
25.06.2018
17:20:53
и без каналов

Nikolay
25.06.2018
17:20:59
это как в нодежсе, где, якобы, все в одном потоке, а на деле нода потоки запускает сама по мере надобности

Алексей
25.06.2018
17:21:16
но JS ни про какие потоки не знает

Nikolay
25.06.2018
17:21:35
но JS ни про какие потоки не знает
нет, но виртуальная машина, которая его исполняет, вполне знает

Алексей
25.06.2018
17:21:44
неа

даже вм не знает походу

Nikolay
25.06.2018
17:21:57
и часть асинхронных вещей реализует именно за счет многопоточности

Алексей
25.06.2018
17:21:59
только рантайм ноды

Tishka17
25.06.2018
17:22:07
Nikolay
25.06.2018
17:22:08
ну да, я про ноду сейчас

v8 не знает, наверное

Алексей
25.06.2018
17:22:35
Nikolay
25.06.2018
17:23:06
а воркеры - это, вроде, процессы

Алексей
25.06.2018
17:23:21
просто у v8 вроде бы есть (точно была) такая "замечательная" особенность, как строго один интерпретатор на процесс

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