LINUX.ORG.RU

Многопоточный питон, PEP 554

 ,


1

4

Как вы могли знать, уже два года идет вялотекущий перевод питона на поддержку независимых интерпретаторов в одном процессе.

https://github.com/ericsnowcurrently/multi-core-python
https://www.python.org/dev/peps/pep-0554/

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

Теперь главный вопрос: зачем? PEP 554 предлагает обращаться за помощью к каналам, как в Go, но:
- каналы как средство взаимодействия потоков убоги даже в Go;
- в питоне уже есть multiprocessing, который по сути и есть развитая идея каналов с возможностью прокинуть в обе стороны вызов функции и запрос атрибутов объекта, вплоть до итераторов, но не более того.

Для людей, которые уже готовы отвечать «ну дык есть же многопроцессы, есть форк на никсах - вот и используйте их», напомню, что реализация форка процесса на уровне ОС-и в действительности мало помогает многоПРОЦЕССовости питона - машем ручкой сборщику мусора, который передергивает счетчики ссылок:
https://instagram-engineering.com/dismissing-python-garbage-collection-at-ins...

>>> import os, sys, gc
>>> len(gc.get_objects())
6888
Это весьма эффективная модель сборки мусора... если у вас ровно один процесс.

Допустим, у нас уже есть несколько независимых потоков интерпретатора. Логичное желание - придумать какие-то эффективные модели взаимодействия интерпретаторов, которыми кто-то захочет пользоваться.
Примитивные ячейки данных (вроде многопоточного bytearray или других настраиваемых структур) довольно бесполезны, потому что мы же пользуемся питоном для того, чтобы взмыть вверх по абстракциям. Если же мы надумаем передать через подобнюу структуру хотя бы элементарную функцию, вроде

def hello():
    return "hello world"
то окажется, что объект строки и объект функции сидят в другом интерпретаторе, а сборщик мусора принципиально не умеет работать более чем в одном потоке, потому просачивание объекта из одного потока в другой вызывает катастрофические последствия.

Можно замутить атомарные операции на питоне, которые будет писать сам пользователь для описания превращений сложных структур, но есть проблема с побочными эффектами и гарантией потокобезопасности, потому что:
- любая функция в питоне использует все вышестоящие контексты, а также имеются замыкания, которые могут использовать свои собственные контексты;
- в CPython довольно сложно понять, работает ли функция с побочными эффектами или без онны. Речь не только про код на питоне, но еще и про код на си.

Для решения проблемы со стандартными бибиотеками и сборщиком мусора сообразительные люди довольно быстро придумали Jython, позже - IronPython, а потом и PyPy. Все три реализации привязывают вас к соответствующей среде выполнения, и это неприкольно даже несмотря на возможность выйти из них в расширения на C или других языках - проще написать уже всё на крестах или жабе, чем морочиться с пирамидами языков.

В итоге, на текущий момент, многопоточная разработка сводится к настройке внешних по отношению к питону потоков, как то сделано в NumPy, а потому разработать отзывчивый GUI на одном питоне не получится, например.

Кто-то видит свет в конце тонеля? Или же это предсмертные видения?

★★★★

Ответ на: комментарий от byko3y

Я же уже написал: потому что компьютеризация растет, прогеров не хватает, имеющиеся не могут освоить SQL, а тут жабоскриптеров избыток - им нужен JSON.

Время и тренды ныне такие ...

Владимир

anonymous
()
Ответ на: комментарий от anonymous

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

Данным не нужно укладываться в реляционную модель. Задача СУБД - организовать удобную форму хранения, которая подойдет достаточному числу людей. Ведь на то она и СУБД - свою базу под свой проект можно в любом виде сделать. На локальном компе вариантов нет, универсальная СУБД - это гибрид реляционки и key-value, коими являются большинство современных СУБД. С распределенными СУБД еще что-то можно думать, потому что распределенный ACID и SQL - это довольно тяжелая задача, как по реализации, так и по ресурсам. Но с локальными ответ уже давно ясен.

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

Эх, не та, не та молодежь нынче пошла... вот в наше время...

В 1984 пришлось поработать с СМ-2М, СМ-1, М-6000.
Ностальжи.
В 32K разделе могла функционировать только одна оверлейная программа.
Но «молод» был и /«сдуру»/ обеспечил возможность одновременной работы нескольких оверлейных программ.
Компилятор паскаля /кстати отличная реализация была/ использовал менее 16K ...

Нынешнее «тренды» в технологиях часто похожи на буйство «буйных».

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Но «молод» был и /«сдуру»/ обеспечил возможность одновременной работы нескольких оверлейных программ.

В объектном коде второй /третьей, .../ программы «на лету» производилась настройка всех адресов ...
Да ведь работало все!

Конечно ныне наработано не мало хороших алгоритмов, ... а вот то что ныне называют «проект» - слезы.

Владимир

anonymous
()
Ответ на: комментарий от byko3y

универсальная СУБД - это гибрид реляционки и key-value,

Для меня универсальная СУБД это та, которая объектно ориентированная.
При этом объекты могут быть:
- массивы;
- списки;
- деревья;
- ...

При этом объекты могут иметь неограниченную вложенность.

PS: Кстати это не фантазии «диванного теоретика».

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Добавочка.

Иногда обсуждается тема «возраста программиста».
При этом высказываются суждения, что после сорока уже «жизнь прошла».

Что могу сказать по этому поводу?

Многие кто в 18 были «баобабами» к с сожалению и в 30-ть и в 40, ... таковыми и остаются.
Также многие кто вместо того, чтобы «вкалывать» потроллить любят, обычно таковыми остаются и в 30-ть и в 40, ...

Впрочем многие в свои 18-ть уже являются «древними стариками».

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Но-но, вы не сравнивайте что было тогда и что сейчас. Сложность тогдашенего ПО была примерно в одну стомиллионную долю нынешнего. А машкоды, скажем, это не сложность, это аутизм, исторический.

anonymous
()
Ответ на: комментарий от anonymous

Ну да ...
Ныне алгоритмы сортировки, компиляторы, вовсе не те что были когда то...

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

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Базовые принципы может и схожи в чём-то, да только теория значительно продвинулась за это время.

anonymous
()
Ответ на: комментарий от anonymous

А вот тут с вами согласен.
И в немалой степени здесь имеет место фактор создания новых архитектур процессоров, мультимидии ...
Ну и что из этого?
Кто сейчас «не умеет» и через двадцать лет таким же останется.

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Но-но, вы не сравнивайте что было тогда и что сейчас. Сложность тогдашенего ПО была примерно в одну стомиллионную долю нынешнего. А машкоды, скажем, это не сложность, это аутизм, исторический.

У тебя странное определение сложности. Ты вот в курсе, что генетический код человека, относящийся к мозгу умещается по размеру в файл приложения «калькулятор» винды? Но мозг несравненно несравненно сложнее и калькулятора, и вообще всех программ. Современное ПО - это неуклюжее нагромождение функций, а не какая-то сложная система. В этом плане старое ПО, где кодер любил и обожал каждую команду, имело намного больше смысла.

byko3y ★★★★
() автор топика
Ответ на: комментарий от anonymous

Ведь NOSQL базы почему начали разрабатывать

Потому что с рсубд надо думать над оптимизацией запросов, что не макак-френдли. Тогда изобрели макак-ориентированные хранилища с быстрой выборкой, и это было хорошо. Но потом на сервер пришли быстрые SSD, и теперь можно херачить тупые селекты со скоростью nosql, но и все фишки рсубд под рукой. Поэтому хипстерские nosql все чаще вылетают на мороз.

anonymous
()
Ответ на: комментарий от byko3y

умещается по размеру в файл приложения «калькулятор»

Это не факт. Но в любом случае днк не бинарный код, написанный обезьянами. Не сравнивайте не сравнимое.

Современное ПО - это неуклюжее нагромождение функций, а не какая-то сложная

Именно что это крайне сложная и интересная система помимо нагромождения и абстракций (которые вообще-то позволяют ПО выполнять более сложные функции с меньшими затратами), ни в какое сравнение не идущая с примитивным кодом для примитивных процессоров прошлого. Разница просто ошеломительна, как на уровне железа, так и на прикладном. Я согласен с тем, что ограниченное железо побуждает кодеров придумывать интересные трюки и оптимизации, да только... Это в любом случае всегда компромисс.

anonymous
()
Ответ на: комментарий от anonymous

Потому что с рсубд надо думать над оптимизацией запросов, что не макак-френдли.

А в NoSQL не нужно думать над оптимизацией? Индекса и сортировка по прежнему подлежат оптимизации. Истинная причина использования NoSQL заключается в том, что можно никак не проектировать структуру базы и по три раза на день менять форму работы с данными, но при этом база будет продолжать работать.
Окончательная же оптимизация запросов SQL довольно проблематична даже для опытных макак, да и нужна только для систем, которые не будут меняться.

Тогда изобрели макак-ориентированные хранилища с быстрой выборкой, и это было хорошо.

Макак-ориентированные хранилища выиграли благодаря мгновенному добавлению и обновлению, а не выборке, про которую можно поспорить.

Но потом на сервер пришли быстрые SSD, и теперь можно херачить тупые селекты со скоростью nosql, но и все фишки рсубд под рукой. Поэтому хипстерские nosql все чаще вылетают на мороз.

Всё проще. Хайп закончился, даже для конченных ньюфажных макак дошло, чего стоит этот NoSQL. А проектов NoSQL наоборот, слишком много. Это вопрос моды, понтов, хайпа, но никак не рациональных факторовю.

byko3y ★★★★
() автор топика
Ответ на: комментарий от anonymous

Именно что это крайне сложная и интересная система помимо нагромождения и абстракций (которые вообще-то позволяют ПО выполнять более сложные функции с меньшими затратами), ни в какое сравнение не идущая с примитивным кодом для примитивных процессоров прошлого.

Я ни сколько не спорю, что интересная. Но абстракция имеет свою цену. Задача, которая могла быть выполнена кодом в 2 кб, нынче требует гору библиотек и прочих абстракций, которые раздувают ее до мегабайт. Да, нынче никто не будет паковать свои алгоритмы в 2 кб, но я говорю про сложность, которой нету - наоборот, сейчас идет тенденция на упрощение систем, которое компенсируется нагромождением этих более простых блоков.

byko3y ★★★★
() автор топика
Ответ на: комментарий от anonymous

Базовые принципы может и схожи в чём-то, да только теория значительно продвинулась за это время.

Создается впечатление, что в вашем представлении раньше разработчики не знали и не использовали: - абстракции и объектный подход; - об деревьях, списках, ... не знали вовсе и не использовали; - вообще не понимали даже термина «архитектура»; - ...

Вообщем разработку вели сразу в опкодах, ...

Владимир

anonymous
()
Ответ на: комментарий от byko3y

key-value модель в форме резиновых полей blob/memo/etc.

Можно сделать тупо таблицу с idrec, id, valueid, value, insert date, update date Проблема в том, что потом это надо как-то выбирать, обновлять, хранить в итоге получаются огромные таблицы с жирными индексами, начинаются пляски с костылями, партицированием и т.п. А если кто-то начинает работать с этим на sql, то там вообще цирк.

Деревья мало кому нужны, их можно натянуть на реляционную модель

Что угодно можно натянуть. Работать не со всем можно нормально.

Синдром утёнка.

Да нет. Просто влом что-то еще учить.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от byko3y

Да, представь себе, настолько дико технологичная, что нода не может этого сделать.

А еще есть автоперекодировка строки в нужную локаль, чтобы угодить любителям всяких кои-8. Но никто в здравом уме так не делает.

Ведь нода придерживается принципа «я ничего не знаю про ваш десктоп, у меня свой мир», и ты этим гордишься

Так нет. Она дату сдвигает в зависимости он временной зоны.

что нода не может этого сделать

Почему она должна это делать? Это библиотечная функция.

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

Это всё предрассудки.

А с чем там еще проблемы, о чем я не упомянул?

Там есть достаточно _реальных_ проблем. Например, хипсторы, хайп и наследие всего этого. То, о чём ты толкуешь - это вкусовщина.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Проблема в том, что потом это надо как-то выбирать, обновлять, хранить в итоге получаются огромные таблицы с жирными индексами, начинаются пляски с костылями, партицированием и т.п. А если кто-то начинает работать с этим на sql, то там вообще цирк.

Как минимум у постгреса есть вычисляемые индексы, которые очень похожи на индексы у многих NoSQL, а запросы NoSQL и SQL часто по сути сопадают.

Деревья мало кому нужны, их можно натянуть на реляционную модель

Что угодно можно натянуть. Работать не со всем можно нормально.

Что не натягивается? Мне аж интересно стало. Деревья как раз прекрасно моделируется реляционкой.

Синдром утёнка.

Да нет. Просто влом что-то еще учить.

А, то есть это серьезный бизнесмен, который рассказывает о превосходстве инструмента, поставщиком которого он является? Ок.

byko3y ★★★★
() автор топика
Ответ на: комментарий от crutch_master

А еще есть автоперекодировка строки в нужную локаль, чтобы угодить любителям всяких кои-8. Но никто в здравом уме так не делает.

Что еще за автоперекодировка? Насколько мне известно, нода решительно ничего не знает про системную кодировку.

Она дату сдвигает в зависимости он временной зоны.

Ох ты ж, вот так достижение. Когда-нибудь его доделают, и тогда можно будет на нем писать приложения для человеков.

что нода не может этого сделать

Почему она должна это делать? Это библиотечная функция.

Это не просто либа для маргиналов на обочине, это вопрос правил преобразования типов во всем приложении.

А с чем там еще проблемы, о чем я не упомянул?

Там есть достаточно _реальных_ проблем. Например, хипсторы, хайп и наследие всего этого. То, о чём ты толкуешь - это вкусовщина.

Если бы пользователю было все равно, то он бы работал в основном в консольке, GUI у него был бы на тикле, и не покупал бы умофонов. Элементарно кто-то захочет скопипастить датку, а она не в том формате. Формат даты является большой и серьезной проблемой для десктопов, ровно как и перевод текста в приложении на язык пользователя. И все, что могут ответить адепты ноды - «это не нужно».

byko3y ★★★★
() автор топика
Ответ на: комментарий от crutch_master

Давай, сделай выборку всех потомков по id родителя на sql.

Задача решается за N запросов, где N - высота куска дерева с заданным родителем.

byko3y ★★★★
() автор топика
Ответ на: комментарий от crutch_master

Давай, сделай выборку всех потомков по id родителя на sql.

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

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

Что еще за автоперекодировка? Насколько мне известно, нода решительно ничего не знает про системную кодировку.

На ноде как раз всё норм. Это на яве выделывались то ли со stringbuffer, то ли еще с чем-то.

Ох ты ж, вот так достижение.

Из-за этого достижения приходится везде выставлять локаль в нулевую тз ради единственного кейса. Оч. удобно.

это вопрос правил преобразования типов во всем приложении

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

Если бы пользователю было все равно

Нет изкаробки == принципиально нельзя сделать? Что за притягивание за уши.

crutch_master ★★★★★
()
Ответ на: комментарий от byko3y

Если запросы скомпилированы, а дерево не сильно разбалансировано, то запрос выполняется весьма быстро

Пушкой по воробьям. Выборка потомков - это минимальная задача, на которой sql уже не состоятелен. Запросы априори медленные, как бы они там не были оптимизированы. Потом к ним цепляется еще что-то и всё это начнёт адово тормозить, а как это поддерживать я вообще молчу.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

На ноде как раз всё норм. Это на яве выделывались то ли со stringbuffer, то ли еще с чем-то.

Подобный buffer использует и в ноде, и применяется для явного преобразования кодировки. Вопрос в том, как приложение встраивается в имеющуюся систему. Питон, к слову, кошмарно работает с виндовой консолькой. React довольно сильно спасает хром, но его возможности не безграничны.

Из-за этого достижения приходится везде выставлять локаль в нулевую тз ради единственного кейса. Оч. удобно.

А это уже вопрос к удобству инструментов языка/среды.

это вопрос правил преобразования типов во всем приложении

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

Проблема в том, что это еще один чих, с которым нужно ежеминутно возиться, кроме заморочек самого языка.

Если бы пользователю было все равно

Нет изкаробки == принципиально нельзя сделать? Что за притягивание за уши.

Я не спорю, что возможно сделать. Но какова будет трудоемкость? Трудоемкость будет такова, что проще будет сделать это на другом языке.

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

А это уже вопрос к удобству инструментов языка/среды.

Ну так они и сделали, чтобы gmt дата преобразовывалась в локальное время без лишних телодвижений, типа удобно, да. Только вот в одном месте удобно, а в другом не удобно.

Проблема в том, что это еще один чих, с которым нужно ежеминутно возиться

Можно переопределить метод прототипа Date и не возиться. Вот было бы кстати хорошо, если бы они переопределялись в границах модуля. Но js макаки вместо того, чтобы сделать инструмент повелись на подобные рассуждения про дизайн языка, юзабилити и засовывают этот не нужный intl, который можно сделать и без них.

Я не спорю, что возможно сделать. Но какова будет трудоемкость? Трудоемкость будет такова, что проще будет сделать это на другом языке.

Мощное по своей абсурдности заявление. Зачем так иррационально хейтить?

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Пушкой по воробьям. Выборка потомков - это минимальная задача, на которой sql уже не состоятелен. Запросы априори медленные, как бы они там не были оптимизированы. Потом к ним цепляется еще что-то и всё это начнёт адово тормозить, а как это поддерживать я вообще молчу.

Что значит «несостоятелен»? Что на реальных СУБД запросы медленные, или что нельзя одним запросом сделать? Рекурсивно-иерархические запросы, вообще-то, уже в SQL:1999 есть: https://en.wikipedia.org/wiki/Hierarchical_and_recursive_queries_in_SQL
Теоретическая скорость выполнения этих запросов больше зависит от индексов. Поиск родительского элемента по индексу имеет сложность O(log N), но по мере увеличения числа узлов в запросе поиск становится O(N * log N), если его выполнить в лоб перебором родительских узлов, и O(N * log M/N) при выполнении джоином, где M - общее число узлов во всём дереве объекте, в противовес N - локальному числу объектов. Поскольку M/N условно можно принять константой, то сложность поиска для одного уровня принимаем O(N). Вот эту оценку берем на каждый уровень, где число уровней - log N, тогда получаем сложность запроса дочерних узлов родителя со всех уровней O(N * log N), а при использовании перебора вместо джоина - O(N * log N * log N). Естественно, без индексов мы имеем O(N * N) и O(N * N * log N), но вряд ли кому-то нужно будет строить дерево без индексов.
Для иерархической хранимой структуры данных поиск дочернего узла - O(1). Запросить N узлов - O(N). Таким образом, та же задача поиска всех дочерних узлов имеет сложность O(N). Вот такое вот достижение - убрали логарифмы из сложности за счет оптимизации структуры под задачу.

byko3y ★★★★
() автор топика
Ответ на: комментарий от crutch_master

Ну так они и сделали, чтобы gmt дата преобразовывалась в локальное время без лишних телодвижений, типа удобно, да. Только вот в одном месте удобно, а в другом не удобно.

Так я об этом и пишу. В адекватных средах это всё настраивается, и есть возможность передавать настройки локали аргументами функциям.

Можно переопределить метод прототипа Date и не возиться. Вот было бы кстати хорошо, если бы они переопределялись в границах модуля. Но js макаки вместо того, чтобы сделать инструмент повелись на подобные рассуждения про дизайн языка, юзабилити и засовывают этот не нужный intl, который можно сделать и без них.

И чо делать с Date, которая залетела какими-то путями из другого модуля? Понимаешь, ты снова предлагаешь костылем подпереть недостаток проектировки. Вся история совершенствования методов разработки на JS представляет собой соревнование таких костылей. Пока что лидируют те, кто создал свои новые языки, компилируемые в JS.

Я не спорю, что возможно сделать. Но какова будет трудоемкость? Трудоемкость будет такова, что проще будет сделать это на другом языке.

Мощное по своей абсурдности заявление. Зачем так иррационально хейтить?

Потому что те инструменты, которые в норм средах уже есть и их нужно просто использовать, тебе придется самому делать руками для своей задачи. А внедрить их в имеющуюся среду нельзя, потому что в любом раскладе кто-то окажется ущимлен.

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

Рекурсивно-иерархические запросы, вообще-то, уже в SQL:1999 есть

Это все затычки для решения частных случаев. Что угодно решается на любом императивном языке в 1 запрос, где для sql надо пилить стандарт.

crutch_master ★★★★★
()
Ответ на: комментарий от byko3y

И чо делать с Date, которая залетела какими-то путями из другого модуля?

Ничо. Это такое себе решение. Делают обёртку и усе, если сильно надо. Поинтересуйся, сколько, например, на яве реализаций всяких дат и календарей. И никто не помер от этого.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Делают обёртку и усе, если сильно надо. Поинтересуйся, сколько, например, на яве реализаций всяких дат и календарей. И никто не помер от этого.

У явы есть аналогичная проблема оторванности от среды. Но ява дает относительно простую реализацию многопоточности, что используется и просто само по себе, и в качестве виртуалки для других языков. В MS поняли ущербность жавы, и разработали .Net. JS не дает ничего в этом плане, все проблемы и особенности его вытекают из целевой сферы - код для манипуляции DOM страницы браузера. Жава, кстати, разрабатывалась именно как подобного рода язык для оживления утюгов, но сану хватило мозгов все-таки заточить его под энтерпрайз, а не браузеры и не утюги, иначе бы жава потеряла абсолютно все сферы влияния.

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

У явы есть аналогичная проблема оторванности от среды. Но ява дает относительно простую реализацию многопоточности, что используется и просто само по себе

Так-то async, event loop и отказ от многопотока, с которого быдлокодеры себе постреляли ноги, было главной фичей ноды. Без этого она бы вообще никому не была нужна. Вот и получается, что дело не в датах.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Так-то async, event loop и отказ от многопотока, с которого быдлокодеры себе постреляли ноги, было главной фичей ноды. Без этого она бы вообще никому не была нужна. Вот и получается, что дело не в датах.

Как бы тебя никто не заставляет пользовать многопотоками, люди пишут фейсы однопотоками, вообще не парясь над какими-то там возможностями параллелизации. Многопотоки - это приятная возможность, которая может перерастать в необходимость, но тут ты столкнешься с тем, что нода принципиально не может в многопоток, как этого не может делать питон, что и является темой треда: сложная система состояний функции-данные ставит крест на любой возможности общих данных.
В Clojure, например, многопоток делается легко и безопасно. Эрланг, хоть и непопулярен, является еще одним хорошим примером безопасного многопотока, но ни питон, ни JS не могут за короткое время стать эрлангоподобными, потому что ряд особенностей архитектуры ставят их в разные классы.

По поводу async-а я уже много раз писал, что это синтаксический сахар, он не несет какого-то реального функционального приобретения.
Event loop же - это единственный способ организации однопоточной программы, которая выполняет больше одной функции.

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

Если у вас «желание совпадет с возможностями», то ... - вообщем пишите.

Редко веду с кем либо диалог.

Работы - ВАЛОМ.
Планов - ВАЛОМ в степени РАБОТА.

Поэтому являясь /супер слово, три буквы «я»/ «тупоконечником» в основном посты ограничиваю «ослоумием» === «остроумие».

 - Говорить о планах - "не мальчик 18 лет", да и планы - хвастовство /не мое/.
 - "Языковые войны" не мое /как на ЛОР любят говорить "ни нужно"/.
 ...

Остается одно «остроумие» === «ослоумие» и чтение постов других.

PS: Полезные темы создаете.

Если что у всех форумчан прошу прощения /может кто шутку за «подковырку» принял/ ...

Владимир

anonymous
()
Ответ на: комментарий от crutch_master

столкнешься с тем, что нода принципиально не может в многопоток

Уже может.

Это многопроцессовость, которая подражает эрлангу, но не дотягивает до онного. Это многоинтерпретаторовость в одном процессе ОС, которую до сих пор не сделали в питоне, потому что не могут придумать применения ей, ведь поведение мало отличается от работы с несколькими процессами. Данные перекидываются по каналу через html5 structured clone, что есть чудовищно примитивный способ. Сравни хотя бы с питоновским двухсторонним прозрачным вызовом фукнций, где прокси-объект выступает в роли объекта из другого процесса.

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

Данные перекидываются по каналу

Там есть какие-то shared объекты, в общем случае это не нужно, нужен ввод -> обработка -> вывод, а не расхлёбывание взаимных блокировок.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Там есть какие-то shared объекты, в общем случае это не нужно, нужен ввод -> обработка -> вывод, а не расхлёбывание взаимных блокировок.

Тоолько SharedArrayBuffer, причем, он же используется для межпроцессовой передачи, что еще раз напоминает, что на самом деле worker_thread - это вариация многопроцессовости. И да, то, что ты описываешь «ввод -> обработка -> вывод» является типичным вариантом многопроцессовой обработки.

byko3y ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.