Открыть список
Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Fork в приложениях использующих event loop

Perl
Существуют разные способы реализовать одновременную обработку данных: fork, threads, event loop… и, насколько я понимаю, вместе они уживаются довольно паршиво.

Давайте возьмём event loop и fork. Есть ли смысл использовать их в одном приложении? На первый взгляд — конечно, есть! Event loop будет нормально работать только при условии, что обработчики событий отрабатывают достаточно быстро. И как только какой-то обработчик начинает требовать много времени для работы, первое что приходит в голову — отforkнуть его в отдельный процесс (в принципе есть ещё и нити, но в perl с ними туго, так что этот вариант даже не рассматриваем).

Но это на первый взгляд. А если копнуть глубже…
Читать дальше →
Всего голосов 4: ↑4 и ↓0 +4
Просмотры3.5K
Комментарии 12

Realplexor: производительный Comet-сервер с API для PHP и Javascript (realtime)

Высокая производительность
Dklab Realplexor — это Comet-сервер, позволяющий держать одновремено сотни тысяч долгоживущих открытых HTTP-соединений с браузерами пользователей. JavaScript-код, запущенный в браузере, подписывается на один или несколько каналов Realplexor-а и вешает обработчик на поступление данных. Сервер может в любой момент записать сообщение в один из таких каналов, и оно будет моментально передано всем подписчикам (хоть одному, хоть тысяче), в режиме реального времени и с минимальной нагрузкой для сервера.

Хотя идейным вдохновителем Realplexor-а был предыдущий проект, dklab_multiplexor, код Realplexor-а не имеет с ним практически ничего общего. Поэтому я и решил сменить название. Несопоставимы также возможности продуктов (см. ниже), да и размер кода увеличился в 7 раз.

Realtime-направление сейчас довольно активно развивается на Западе, и в нем особенно выделяется продукт Tornado — событийно-ориентированный веб-сервер на языке Python. Правда, Tornado — это не столько Comet-сервер, сколько инструмент, с помощью которого можно запрограммировать «в том числе» и Comet-сервер. Ключевые слова: Comet, Push Server, Long polling, JavaScript, XMLHttpRequest.

Главные преимущества Realplexor-а:
  • простота использования: наличие API для JavaScript, API для PHP (в будущем — и для других языков);
  • простота конфигурирования;
  • широкий функционал (либо отстутствующий, либо недоступный напрямую в аналогах).

Лучше один раз увидеть...


Я сделал отдельную онлайн-песочницу, чтобы продемонстрировать функционал нового Realplexor-а и то, для чего вообще нужны Comet-серверы (кстати, это физически тот же самый демон Realplexor-а, что использует мой новый стартап РуТвит). Песочница реализует что-то типа многоканального чата: зайдя, вы получите как будто бы 2 независимых «браузера», запущенных на разных компьютерах.
  • Верхний «браузер» отображает каналы — в них моментально появляются новые сообщения, как только кто-то их туда отправляет на стороне сервера. Конечно же, эту страницу могут просматривать одновременно сотни тысяч пользователей, и они все будут видеть одно и то же (реализовано с использованием Realplexor JavaScript API). Можно «на лету» добавлять новые каналы (подписка) или скрывать уже имеющиеся (отписка).
  • Нижний браузер содержит формы, позволяющие добавлять сообщение в произвольный канал, указав его имя. Форма AJAX-ом отправляется на сервер, и уже там PHP-скрипт записывает в Realplexor полученный текст через PHP API. (И да, так можно чатиться.)
По умолчанию на странице открыто 3 канала с именами Alpha, Beta и RuTvit. Но, конечно, вы можете закрыть эти каналы и открыть новые. Вот, например, страница с единственным открытым каналом по имени Habrahabr: http://rutvit.ru/realplexor/demo?ids=Habrahabr.



Песочница демонстрирует следующие функции Realplexor-а:
Читать дальше →
Всего голосов 99: ↑92 и ↓7 +85
Просмотры19.1K
Комментарии 141

Ожидание нескольких событий в nodejs

Node.JS
Из песочницы
Наверное, каждый, кто начинает изучать nodejs, испытывает трудности с переходом на событийно-ориентированное программирование. Все просто, пока мы можем выполнять действия последовательно: начинать следующее, дождавшись завершающего события от предыдущего. Но что делать, если таких действий много и они продолжительны во времени? А если мы не можем продолжать, пока не дождемся завершения каждого из них?

Почитать рассуждения новичка
Всего голосов 29: ↑23 и ↓6 +17
Просмотры12.3K
Комментарии 7

Как применять Linux epoll в Python

Python
Перевод
Tutorial
В статье описывается:
  • Примеры использования блокирующих сокетов
  • Преимущества асинхронных сокетов и Linux epoll
  • Примеры асинхронного использования сокетов через epoll
  • Вопросы производительности
  • Исходный код
Читать дальше →
Всего голосов 54: ↑49 и ↓5 +44
Просмотры21.9K
Комментарии 30

Что такое «асинхронная событийная модель», и почему сейчас она «в моде»

Node.JS
Из песочницы
Сейчас в тематических интернетах модно слово «Node.js». В этой небольшой статье мы попробуем понять («на пальцах»), откуда всё это взялось, и чем такая архитектура отличается от привычной нам архитектуры с «синхронным» и «блокирующим» вводом/выводом в коде приложения (обычный сайт на PHP + MySQL), запущенного на сервере приложений, работающем по схеме «по потоку (или процессу) на запрос» (классический Apache Web Server).
Читать дальше →
Всего голосов 163: ↑152.5 и ↓10.5 +142
Просмотры50.8K
Комментарии 130

Node.js — раковая опухоль

Node.JS
Перевод
Если и есть что-то, что веб-разработчики любят, так это знать что-то, что лучше традиционного. Но традиционное является таковым по одной причине: это дерьмо работает. Что-то давно беспокоило меня во всей этой шумихе вокруг Node.js, но у меня не было времени разобраться, что именно, пока я не прочитал полный боли в жопе пост от Райана Дала, создателя Node.js. Я бы забыл его, как любое очередное нытьё какого-то осла о том, что Unix слишком сложен. Но, как полицейскому, который, жопой чуя, что что-то не так с этой семьёй в микроавтобусе, останавливает его и находит пятьдесят килограммов героина, мне показалось, что что-то не так с этой слезливой историей, и возможно, просто возможно, он понятия не имеет, что делает, и много лет программирует, никем не контролируемый.

Поскольку вы читаете это, вы, возможно, уже поняли, что моя догадка подтвердилась.
Всего голосов 559: ↑476 и ↓83 +393
Просмотры131K
Комментарии 347

Шаблоны проектирования в автоматном программировании

Программирование

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

В статье рассматриваются особенности применения шаблонов Visitor/Double Dispatch и State при реализации системы на основе конечного автомата. Кроме того, статью можно рассматривать как продолжение цикла публикаций о шаблонах проектирования на Хабрахабре.

Читать дальше →
Всего голосов 31: ↑26 и ↓5 +21
Просмотры15.8K
Комментарии 12

Спагетти в последовательном вызове асинхронных функций. Теория и практика

JavaScript
В продолжение статьи Последовательный вызов асинхронных функций.

Часть 1. Теория


Большинство традиционных, не-веб языков программирования являются синхронными (блокирующими).
Как можно определить, синхронный или же асинхронный данный язык? Например, по наличию/отсутствию функции sleep (может называться также delay, pause и т.д.), когда программа полностью останавливается на определённое количество времени.

В JavaScript, как вы знаете, такой функции нет. Есть, например
Читать весь текст
Всего голосов 65: ↑57 и ↓8 +49
Просмотры11.8K
Комментарии 46

Coro и ещё одна реализация rouse-callback

Perl
Есть в CPAN такое замечательное семейство модулей — Coro. Эти модули позволяют программировать на перле с использованием корутин.
Читать дальше →
Всего голосов 6: ↑6 и ↓0 +6
Просмотры3.5K
Комментарии 4

Назад, к технологиям верхнего палеолита, от любимых всеми REST, STATEless, CRUD, CGI, FastСGI и MVC

Разработка веб-сайтовАнализ и проектирование системAPI
«Только со смертью догмы начинается наука.»
// Галилео Галилей


«Я начал завидовать рабам. Они всё знают заранее. У них твёрдые убеждения.»
// х/ф Марка Захарова «Убить дракона» по мотивам пьесы Евгения Шварца


Уже пару лет и дня не проходит, чтобы я не услышал (или не прочитал) от людей, начинающих новые проекты, фразу типа «Возьмем серверный движок для REST API и MVC, и погнали». Сначала я думал, что у этих слов есть один источник, может книжку какую завезли во все магазины или где-то в топе поисковиков лежит статья, зомбирующая разработчиков. Если же выяснять у них, что они понимают под REST и MVC, то можно повредиться умом. Ну с MVC уже все ясно, об этом я уже давно писал, ничего не изменилось, только усугубилось, стоит набрать в Google Images «mvc» и мы увидим страшное, стрелочки в любые стороны. Ну а про REST отвечают следующее: ну как же, нам нужно из браузерного GUI и мобильного приложения вызывать серверные методы, например: setUserCity(userId, cityId) или calculateMatrix(data) или startVideoConverter(options, source, destination) а потом мы столкнемся с большой нагрузкой и архитектура REST все решит. Дальше я задаю вопросы, от которых глаза округляются уже у тех, кто недавно еще горел праведной верой, рвался в бой и точно знал, что к чему в этом мире. Теперь можно перейти к рассмотрению терминологической катастрофы, в эпицентре которой мы с вами пребываем.
Читать дальше →
Всего голосов 121: ↑98 и ↓23 +75
Просмотры62.6K
Комментарии 160

Python реализация парадигмы event-driven с помощью сопрограмм

PythonАлгоритмыПараллельное программирование
Статья про то, как с помощью расширенных генераторов Python сделать собственную реализацию сопрограмм, переключающихся по получению событий. Простота кода получившегося модуля вас приятно удивит и прояснит новые и мало используемые возможности языка, которые можно получить, используя такие генераторы. Статья поможет разобраться и с тем, как это устроено в серьезных реализациях: asyncio, tornado, etc.
Читать дальше →
Всего голосов 23: ↑22 и ↓1 +21
Просмотры44.6K
Комментарии 17

Python 3.5; async/await

PythonПрограммированиеПроектирование и рефакторингАлгоритмыПараллельное программирование
Тихо и незаметно (с), вышел Python версии 3.5! И, безусловно, одно из самых интересных нововведений релиза является новый синтаксис определения сопрограмм с помощью ключевых слов async/await, далее в статье об этом.

Поверхностный просмотр «PEP 0492 — Coroutines with async and await syntax» по началу оставил у меня вопрос «Зачем это надо». Сопрограммы удовлетворительно реализуются на расширенных генераторах и на первый взгляд может показаться, что все свелось к замене yield from на await, а декоратора, создающего сопрограмму на async. Сюда можно добавить и возникающее ощущение, что все это сделано исключительно для использования с модулем asyncio.

Но это, конечно же, не так, тема глубже и интереснее.
Читать дальше →
Всего голосов 29: ↑28 и ↓1 +27
Просмотры169.8K
Комментарии 26

Введение в futures-rs: асинхронщина на Rust [перевод]

Высокая производительностьOpen sourceПрограммированиеАлгоритмыRust
Tutorial


Этот документ поможет вам изучить контейнер для языка программирования Rust — futures, который обеспечивает реализацию futures и потоков с нулевой стоимостью. Futures доступны во многих других языках программирования, таких как C++, Java, и Scala, и контейнер futures черпает вдохновение из библиотек этих языков. Однако он отличается эргономичностью, а также придерживается философии абстракций с нулевой стоимостью, присущей Rust, а именно: для создания и композиции futures не требуется выделений памяти, а для Task, управляющего ими, нужна только одна аллокация. Futures должны стать основой асинхронного компонуемого высокопроизводительного ввода/вывода в Rust, и ранние замеры производительности показывают, что простой HTTP сервер, построенный на futures, действительно быстр.


Читать дальше →
Всего голосов 46: ↑46 и ↓0 +46
Просмотры12.3K
Комментарии 7

42 строки кода для выхода из лимба

Разработка веб-сайтовJavaScriptNode.JS
Вы ведь знаете, как это бывает: большой проект долго проектируется, долго пишется, порой вымучивается и в конце концов сдается. Проходит месяц другой «горячей отладки», и после наступает благоговейная тишина. От заказчика ничего не слышно. И не потому что он разорился благодаря вашим трудам; счета за телефон у него не оплачены, а интернет давно отключен, нет) Просто у него все работает в штатном режиме.

Но в один прекрасный день…
Читать дальше →
Всего голосов 25: ↑18 и ↓7 +11
Просмотры16.2K
Комментарии 13

Знай свой инструмент: Event Loop в libuv

JavaScriptПрограммированиеАнализ и проектирование системСистемное программированиеNode.JS
image
Юдель Пэн. Часовщик. 1924

«Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы» 
Алан Кокс, прим. Википедия


“Знай свой инструмент” — твердят все вокруг и все равно доверяют. Доверяют модулю, доверяют фреймворку, доверяют чужому примеру.

Излюбленный вопрос на собеседованиях по Node.js — это устройство Event Loop. И при всем том, очевидном факте, что прикладному разработчику эти знания будут полезны, мало кто пытается самостоятельно погрузиться в устройство событийного цикла. В основном, всех устраивает картинка сверху. Хоть это и похоже на пересказ фильма, который ты не смотрел, а о котором тебе рассказал друг.
Читать дальше →
Всего голосов 35: ↑35 и ↓0 +35
Просмотры45.9K
Комментарии 19

Краткий справочник информатики

ПрограммированиеСовершенный кодПроектирование и рефакторингHaskellООП

Область ИТ растёт, и легко заблудиться в зоопарке подходов, фреймворков и технологий, которые громко заявляют о своей "новизне" и "эффективности". Но за обёрткой обычно скрываются старые добрые идеи, заново "изобретённые" в другом контексте. В итоге распространяется не самая простая и эффективная, а самая разрекламированная реализация. Разработчики не успевают вдумчиво произвести выбор из-за постоянного недостатка времени, а менеджеры выбирают самое распространённое, чтобы снизить риски при поиске разработчиков.


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

Читать дальше →
Всего голосов 19: ↑8 и ↓11 -3
Просмотры4.5K
Комментарии 64

Открытый вебинар «Особенности языка JavaScript»

Блог компании OTUSJavaScriptПрограммирование
Всем бобра!

Переработали тут по заявкам слушателей программу курса по JavaScript: дописали смежные темы типа сборщиков, тестовых фреймворков плюс догнали чуток изучения подходов по ООП + SOLID, паттерны и ещё мелкие разные изменения. По этому поводу провели достаточно интересный открытый вебинар на тему «Особенности языка JavaScript», где Юрий Дворжецкий рассказывал и показывал (а ещё и спрашивал) основные отличия языка, идиомы JS.


Как всегда ждём вопросы, пожелания, тапки.
Всего голосов 14: ↑10 и ↓4 +6
Просмотры5.1K
Комментарии 0

Иван Тулуп: асинхронщина в JS под капотом

Блог компании Конференции Олега Бунина (Онтико)Высокая производительностьРазработка веб-сайтовJavaScriptNode.JS
А вы знакомы с Иваном Тулупом? Скорее всего да, просто вы еще не знаете, что это за человек, и что о состоянии его сердечно-сосудистой системы нужно очень заботиться.

Об этом и о том, как работает асинхронщина в JS под капотом, как Event Loop работает в браузерах и в Node.js, есть ли какие-то различия и, может быть, похожие вещи рассказал Михаил Башуров (SaitoNakamura) в своем докладе на РИТ++. С удовольствием делимся с вами расшифровкой этого познавательного выступления.



О спикере: Михаил Башуров — fullstack веб-разработчик на JS и .NET из Luxoft. Любит красивый UI, зеленые тесты, транспиляцию, компиляцию, технику compiler allowing и улучшать dev experience.

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

Читать дальше →
Всего голосов 40: ↑33 и ↓7 +26
Просмотры29.7K
Комментарии 4

Всё что вам нужно знать о Node.js

JavaScriptNode.JS
Из песочницы

Привет, Хабр! Представляю вашему вниманию перевод статьи "Everything you need to know about Node.js" автора Jorge Ramón.



В наши дни платформа Node.js является одной из самых популярных платформ для построения эффективных и масштабируемых REST API's. Она так же подходит для построения гибридных мобильных приложений, десктопных программ и даже для IoT.


Я работаю с платформой Node.js более 6 лет и я на самом деле люблю её. Этот пост главным образом пытается быть путеводителем по тому, как Node.js работает на самом деле.

Читать дальше →
Всего голосов 75: ↑71 и ↓4 +67
Просмотры85.2K
Комментарии 18

Что ты такое, Event Loop? Или как устроен цикл событий в браузере Chrome

JavaScriptБраузеры
Как думаете, что произойдет, если запустить в консоли браузера этот фрагмент кода?

function foo() {
  setTimeout(foo, 0);
}

foo();

А этот?

function foo() {
  Promise.resolve().then(foo);
}

foo();

Если вы также, как и я, прочитали кучу статей про Event Loop, Main Thread, таски, микротаски и прочее, но затрудняетесь ответить на вопросы выше — эта статья для вас.
Читать дальше →
Всего голосов 50: ↑47 и ↓3 +44
Просмотры62K
Комментарии 15
1