Pull to refresh
0
0
begemot3 @begemot3

User

Send message

Асинхронное программирование: концепция Deferred

Reading time7 min
Views54K
Асинхронная концепция программирования заключается в том, что результат выполнения функции доступен не сразу же, а через некоторое время в виде некоторого асинхронного (нарушающего обычный порядок выполнения) вызова. Зачем такое может быть полезно? Рассмотрим несколько примеров.

Первый пример — сетевой сервер, веб-приложение. Чаще всего как таковых вычислений на процессоре такие приложения не выполняют. Большая часть времени (реального, не процессорного) тратится на ввод-вывод: чтение запроса от клиента, обращение к диску за данными, сетевые обращение к другим подсистемам (БД, кэширующие сервера, RPC и т.п.), запись ответа клиенту. Во время этих операций ввода-вывода процессор простаивает, его можно загрузить обработкой запросов других клиентов. Возможны различные способы решить эту задачу: отдельный процесс на каждое соединение (Apache mpm_prefork, PostgreSQL, PHP FastCGI), отдельный поток (нить) на каждое соединение или комбинированный вариант процесс/нить (Apache mpm_worker, MySQL). Подход с использованием процессов или нитей перекладывает мультиплексирование процессора между обрабатываемыми соединениями на ОС, при этом расходуется относительно много ресурсов (память, переключения контекста и т.п.), такой вариант не подходит для обработки большого количества одновременных соединений, но идеален для ситуации, когда объем вычислений достаточно высок (например, в СУБД). К плюсам модели нитей и процессов можно добавить потенциальное использование всех доступных процессоров в многопроцессорной архитектуре.
Читать дальше →
Total votes 54: ↑44 and ↓10+34
Comments24

Django в неблокирующем стиле, или в погоне за Священным Граалем

Reading time2 min
Views4.6K
image

Присказка


При чтении о Twisted, Tornado, Node.js, у многих python-программистов возникает вопрос — «а вот если взять, и переписать Django в неблокирующем стиле?». Обычный ответ на этот вопрос — нет, не дождетесь. И правда, чтобы переписать целый фреймворк в макаронно-колбечном стиле, надо очень много сил, и большой заряд энтузиазма. Писать с колбеками, очень сомнительное удовольствие.

Так бы и было, но как я писал в своей прошлой заметке, есть в python-мире greenlet-ы, которые легким движением руки помогают скрыть от программиста все эти асинхронные моменты, до определенной степени. В момент написания той заметки, к мысли заставить работать Django в неблокирующем режиме, я относился весьма скептически — ну в самом деле, кто за это возьмется?

Читать дальше →
Total votes 65: ↑56 and ↓9+47
Comments64

Deferred для Javascript (Prototype)

Reading time2 min
Views3.4K
Prototype and Twisted
Продолжая тему Deferred для JavaScript предлагаю еще одно переписывание Deferred, теперь в терминах Prototype. Подробнее о самом Deferred можно почитать в двух моих прошлых заметках: Асинхронное программирование: концепция Deferred и Deferred: все подробности. Если кратко, самое распространенное и полезное применение Deferred в JavaScript — это работа с AJAX или другими RPC-over-HTTP вызовами, когда необходимо совершить цепочку логически связанных вызовов, корректно обрабатывать возникающие ошибки и т.п. С моей точки зрения, Deferred крайне необходим в таких ситуациях.

Перейдем к примерам: обращение к некоторому JSON-RPC API на основе Prototype’овского Ajax.Request можеть быть обернуто в Deferred следующим образом:
Читать дальше →
Total votes 27: ↑24 and ↓3+21
Comments6

Асинхронное программирование: Примитивы высокого уровня

Reading time2 min
Views3.1K
После появления асинхронного каркаса Twisted концепция отложенного результата (continuable) стала очень популярной.

Прежде всего рекомендую прочитать статьи: Асинхронное программирование: концепция Deferred, Deffered для JavaScript.

Но пользоваться отложенными результатами не очень удобно без абстракций более высокого уровня. И теперь у нас есть каркас Do.
Читать дальше →
Total votes 13: ↑11 and ↓2+9
Comments12

Server-side JS (v8+Node)

Reading time2 min
Views12K
Недавно видел на хабре спор по поводу того, что нам не нужны никакие скриптовые языки, кроме javascript. Утверждение, конечно, спорное, но меня заинтересовала возможность применения javascript на сервере.
Читать дальше →
Total votes 42: ↑39 and ↓3+36
Comments82

ExtJS для новичков — Подготовка к работе со Store

Reading time5 min
Views18K
Этот топик является продолжением заметки, оставленой в песочнице. Тут, как и было обещано в заметке, будет более подробно рассказано о использовании обьектов DataProxy, DataReader.
Читать дальше →
Total votes 27: ↑25 and ↓2+23
Comments6

Триггеры в MySQL

Reading time2 min
Views294K
Триггер — это хранимая процедура, которая не вызывается непосредственно, а исполняется при наступлении определенного события ( вставка, удаление, обновление строки ).
Поддержка триггеров в MySQL началась с версии 5.0.2
Читать дальше →
Total votes 55: ↑50.5 and ↓4.5+46
Comments49

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered