Comments 28
Java
Допустим, нам необходимо обслужить 10000 клиентских соединений — нам придется породить 10000 потоков операционной системы, технически это возможно.
Ваша информация о Java уже лет 5-10 как устарела :(
Не стоит вводить читателей в заблуждение.
Почти 16 лет (!!) уже прошло, как в java нативно поддерживает асинхронный IO, а люди по прежнему несут бред про «в Java 10k клиентов = 10k потоков» (facepalm).
ps: Netty вообще имеет возможность работать с kqueue / epoll напрямую, если нужно.
Почему-то считается, что Java — это тупо блокирующее IO.
Ребята, почитайте доки, вы сильно удивитесь.
Байндинги к epoll есть в любом современном языке программирования. Статья была не про это.
Да, я понимаю, что статья была о другом, но за этим акцентом теряется весь глубокий смысл статьи, т.к. если автор технически не подкован и несет бред, то нету смысла читать дальше. Уж извините.
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) — не смогли, а Вы — смогли!
Очевидно, Хабру не очень пригодится такой автор, как я, но я и не рвался, дамы и господа! Я много лет пишу тексты, в том числе, и технические, если бы я всерьез собирался писать на Хабр — я бы давно начал, но я не собираюсь и не начну, почему — должно быть понятно из комментариев. Я много лет вообще молчал на этой площадке, видя, что происходит с текстами и мнениями моих друзей, и могу только процитировать себя же: «мы заложники пассивно-агрессивного стада, с которым, тем не менее, приходится коммуницировать по бизнес-нужде, и мне стыдно, что мне тоже пришлось в этом участвовать».
multithreaded async — это работа с коллбэками, исполняющимися на пуле потоков. Например, как в Java NIO.2.
Допустим, нам надо обслужить те же 10000 соединений — теперь нам придется породить 10000 отдельных копий интерпретатора Perl, что невозможно технически.
Интересно, а автор с перлом дело имел? Ни кто, и ни когда не станет такие задачи решать методом грубой силы.
1. Почему колбэки и select/epoll сидят в одном разделе? Последние не работают с колбэками.
И вообще, колбэки на уровне ОС есть только в Windows, да и не очень-то они эффективны из-за переключения контекста.
2. Где различия между stackless и stackfull реализациями?
Внешне они выглядят однаково, но внутреннее устройство различно. Первое — просто синтаксический сахар над колбэками (async/await в js, c#), второе — многопоточность в пользовательском режиме (go), называемая кооперативной многозадачностью.
Почему вы пишете, что в Node.JS используется модель N:1? Там же нет никаких потоков даже в userspace.
Автор определенно смешал понятия асинхронности и паралеллизма. Асинхронность слабо, или вообще ни как не связана с ОС и ядрами процессора.
Пример раз:
Встраиваемая программа в цикле опрашивет датчики освещенности, темпиратуры, ну и пусть будет влажности. Как только показатели выходят за границы, программа включает/выключает соответствующий прибор.
Пример два:
Всем известный веб сервер apache. В режиме prefork первичный процесс мониторит количество потомков и иагрузку, по мере необходимости выполняя fork нужное число раз. Обработка самих запросов идет асинхронно, относительно родительского процесса.
К вопросу о принципах работы асинхронных решений