Pull to refresh

Comments 28

Парни, накидайте alexclear кармы, на мой взгляд, Хабру очень пригодится такой автор!
начало бодрое, а конец скомканый, вывод я не понял (может я тупой).
Вывод был примерно такой: «Классификации могут быть разные, в зависимости от того, какие признаки выбрать для их построения».
А то я читал с мыслью о том что более приземленные темы вот-вот раскроют. А в конце оказалась только альтернативная классификация.
Java

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

Ваша информация о Java уже лет 5-10 как устарела :(
Не стоит вводить читателей в заблуждение.
ну да, netty тому пример
Да, речь про nio, который доступен с Java 1.4, релиз которой был в 2002 году.

Почти 16 лет (!!) уже прошло, как в java нативно поддерживает асинхронный IO, а люди по прежнему несут бред про «в Java 10k клиентов = 10k потоков» (facepalm).

ps: Netty вообще имеет возможность работать с kqueue / epoll напрямую, если нужно.
Братюня! Истово плюсую!
Почему-то считается, что Java — это тупо блокирующее IO.
Ребята, почитайте доки, вы сильно удивитесь.
Почему-то считается, что Java — это тупо блокирующее IO.

Кем считается?
Про NIO написано непосредственно в статье про Java в википедии, я не знаю, куда еще можно было бы написать — на руку, на лоб?
Это прекрасно, но я не понял — я что, в каком-то месте это пытаюсь опровергнуть?
Байндинги к epoll есть в любом современном языке программирования. Статья была не про это.
Вы сделали акцент (выделили отдельным блоком и подкрасили цветом), что Java – это всегда блокирующее IO. Вы то же самое сделали в отношении Perl.

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

ps: я так же понимаю, что этой строкой Вы хотели подогреть статью и подцепить на крючек неокрепшие умы, которые где-то прочитали/услышали, что Java – это плохо. Но Вы же инженер! (я надеюсь). Не нужно так =)
Вы сделали акцент (выделили отдельным блоком и подкрасили цветом), что Java – это всегда блокирующее IO. Вы то же самое сделали в отношении Perl.

Я? Вот оригинал статьи: telegra.ph/K-voprosu-o-principah-raboty-asinhronnyh-reshenij-10-01
Что в нем выделено отдельным блоком? O_O
Там даже абзац начат со слова «классическая», потому что речь идет о классической модели, есть и другие. Не понимаю, где там написано, что Java — это всегда блокирующее IO. Не понимаю, где там написано «не используйте Java». Вдвойне забавен тот факт, что статья датирована октябрем 2017-го, а, начиная с мая 2017-го мы с коллегой писали сервис на базе netty для хранения бинарных данных в Cassandra (что, некоторым образом, мешает мне утверждать, что Java — это всегда блокирующее IO).

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

Я рад, что у статьи был глубокий смысл (какой?) и рад, что по-прежнему есть люди умнее меня.

ps: я так же понимаю, что этой строкой Вы хотели подогреть статью

А с какой предположительной целью?

и подцепить на крючек неокрепшие умы, которые где-то прочитали/услышали, что Java – это плохо.

Чтобы дальше сделать с ними что?
Ваш пойнт в чем? В том, что Вы лучше меня? Да пожалуйста, я к подобному давно привык, здесь много людей, которые лучше меня, это же Хабр.
В том, что мне не надо писать тексты? Странно, учитель литературы говорил другое.
В том, что написанные тексты надо показывать коллегам? Так я это сделал в фейсбуке еще в октябре — но, вероятно, мои коллеги недостаточно умны. :(
Моей целью ни в коем случае не было оскорбить или зацепить ваши чувства или сказать, что я в чем-то лучше Вас. Отнюдь, я лишь сказать хотел, что не стоит использовать элементы грязного маркетинга и писать технический буллщит.

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

Под грязными приемами я имею ввиду такой:
Классическая (как в современной Java) модель синхронной параллельной обработки ориентируется на использование потоков операционной системы… Допустим, нам необходимо обслужить 10000 клиентских соединений — нам придется породить 10000 потоков операционной системы, технически это возможно.

В этом фрагменте есть ключевые поинты:
— отсылка на «старые подходы» (классические)
— на конкретную современную платформу, в которой эти старые подходы до сих пор используются
— и самое вкусное в конце: «10k соединений = 10k потоков», – это же ужасно!!!

Любой неокрепший ум воспринимает такой текст как «Вот эту платформу ни в коем случае нельзя использовать – она нерационально использует ресурсы!».

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

Я так и не понял — а с какой целью-то?

В самом начале топика написано, что Вы автор этой статьи. Никаких ссылок на оригинал и что авторство не ваше, нету.

Давайте по-порядку.
Первое: Вы пишете, что я что-то выделил отдельным блоком и подкрасил цветом.
Второе: я даю Вам ссылку на, собственно, исходный текст статьи (своей! да, это моя статья, написанная в октябре 2017-го по просьбе коллег с телеграм-канала про язык Perl), где ничего не выделено и не подкрашено.
Третье: Вы мне пишете фразу, которую я не могу понять.
Разговор зашел в тупик.
Я попробую еще раз: я ничего не выделял и не подкрашивал, это требует дополнительных пояснений?

на конкретную современную платформу, в которой эти старые подходы до сих пор используются

Вы не поверите, они в ней до сих пор используются!
Прочитайте, пожалуйста, целиком:
«Классическая (как в современной Java) модель синхронной параллельной обработки ориентируется на использование потоков операционной системы в качестве потоков рантайма» — а что, классическая модель СИНХРОННОЙ ПАРАЛЛЕЛЬНОЙ обработки в современной Java работает как-то иначе?
В чем суть Вашей претензии, я не пойму?

Любой неокрепший ум воспринимает такой текст как «Вот эту платформу ни в коем случае нельзя использовать – она нерационально использует ресурсы!».

У меня жена — психолог, можно, я про неокрепшие умы буду разговаривать с ней, а не с Вами? Спасибо!

Этот фрагмент написан в таком виде умышленно, почему и зачем – это хорошие вопросы, автору виднее.

Я, как автор, нижайше прошу Вас перестать приписывать мне реплики и утверждения из своей головы. На каком основании Вы считаете меня сперва идиотом, а потом — желтым журналистом? Я Вам повода не давал. Давайте, я Вас начну считать некомпетентным только на основании того, что Вы работаете в EPAM — Вам приятно будет?

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

Действительно, в октябре 2017-го я предвидел, что Олег в январе 2018-го разместит статью на Хабре, и принял меры.
Как хорошо, что Вы меня разоблачили!
Тысяча подписчиков в фейсбуке, среди которых есть, например, Яша Сироткин (это исторически первый координатор русской JUG) — не смогли, а Вы — смогли!

Очевидно, Хабру не очень пригодится такой автор, как я, но я и не рвался, дамы и господа! Я много лет пишу тексты, в том числе, и технические, если бы я всерьез собирался писать на Хабр — я бы давно начал, но я не собираюсь и не начну, почему — должно быть понятно из комментариев. Я много лет вообще молчал на этой площадке, видя, что происходит с текстами и мнениями моих друзей, и могу только процитировать себя же: «мы заложники пассивно-агрессивного стада, с которым, тем не менее, приходится коммуницировать по бизнес-нужде, и мне стыдно, что мне тоже пришлось в этом участвовать».
UFO just landed and posted this here
«Что такое multithreaded async? По моей… классификации это опять N:M»
multithreaded async — это работа с коллбэками, исполняющимися на пуле потоков. Например, как в Java NIO.2.
Допустим, нам надо обслужить те же 10000 соединений — теперь нам придется породить 10000 отдельных копий интерпретатора Perl, что невозможно технически.

Интересно, а автор с перлом дело имел? Ни кто, и ни когда не станет такие задачи решать методом грубой силы.

А где тут, собственно жёсткий хардкор?

1. Почему колбэки и select/epoll сидят в одном разделе? Последние не работают с колбэками.
И вообще, колбэки на уровне ОС есть только в Windows, да и не очень-то они эффективны из-за переключения контекста.

2. Где различия между stackless и stackfull реализациями?
Внешне они выглядят однаково, но внутреннее устройство различно. Первое — просто синтаксический сахар над колбэками (async/await в js, c#), второе — многопоточность в пользовательском режиме (go), называемая кооперативной многозадачностью.
Странно упомянуть async/await и не упомянуть родоначальника этого паттерна, а именно платформу .net
Если мне память не изменяет, эти ключевые слова были представлены MS как синтаксический сахар в компиляторе C++ в тулките для разработки под новое асинхронное API WinRT которое должно было заменить Win32. И это API было никак не связано с .NET. Это особо подчеркивалось, как мне помнится. .net и C# позже подтянулись. Так что первым языком в котором появились эти ключевые слова все же C++ ) правда не в ISO стандарте а в очередной интерпретации MS.
Если память не изменяет то первым языком с поддержкой async/await был F#. Там толпа энтузиастов. Ну а компилятор преобразует это в CLR, и там это выглядит в виде машины состояния с двумя состояниями, и переход между ними выполняется с помощью goto оператора. Ну а в CLR самые узкие места написаны на C/C++.
Я так понял статья все ещё не дописана) будет все же интересно прочитать ее полную версию, таки с какими то выводами)

Почему вы пишете, что в Node.JS используется модель N:1? Там же нет никаких потоков даже в userspace.

Типичная ошибка человека, который увидел код с async/await, который внешне выглядит как синхронный.

Автор определенно смешал понятия асинхронности и паралеллизма. Асинхронность слабо, или вообще ни как не связана с ОС и ядрами процессора.
Пример раз:
Встраиваемая программа в цикле опрашивет датчики освещенности, темпиратуры, ну и пусть будет влажности. Как только показатели выходят за границы, программа включает/выключает соответствующий прибор.
Пример два:
Всем известный веб сервер apache. В режиме prefork первичный процесс мониторит количество потомков и иагрузку, по мере необходимости выполняя fork нужное число раз. Обработка самих запросов идет асинхронно, относительно родительского процесса.

Sign up to leave a comment.