Рубрика «IPC»

Предисловие переводчика

Это скорее вольный пересказ, а не перевод. Я включил в эту статью только те части оригинала, которые имеют непосредственное отношение к внутренним механизмам работы DLR или объясняют важные идеи. Примечания будут заключены в квадратные скобки

Многие .NET разработчики слышали про Dynamic Language Runtime (DLR), но почти ничего о нем не знают. Разработчики, пишущие на языках типа C# или Visual Basic, избегают языков с динамической типизацией из-за боязни исторически связанных с ними проблем с масштабируемостью. Также их беспокоит тот факт, что языки типа Python или Ruby не выполняют проверку типов во время компиляции, что может привести к сложным для поиска и исправления ошибкам в рантайме. Это обоснованные опасения, которые могут объяснить, почему DLR не пользуется популярностью среди основной массы .NET разработчиков даже спустя два года после официального релиза [статья довольно старая, но с тех пор ничего не изменилось]. В конце концов, любой .NET Runtime, содержащий в себе слова Dynamic и Language в своем названии, должен предназначаться строго для поддержки таких языков, как Python, правильно?

Притормозите. В то время как DLR действительно была задумана для поддержки «Iron» реализации Python и Ruby в .NET Framework, её архитектура предоставляет гораздо более глубокие абстракции.

Грокаем DLR - 1
Читать полностью »

Обзор возможностей библиотеки Apache Curator для Apache Zookeeper - 1

По долгу работы мне приходится сталкиваться с проектированием и разработкой распределенных приложений. Такие приложения часто используют различные средства межпроцессного взаимодействия для организации взаимодействия компонентов. Особые сложности возникают в процессе реализации алгоритмов, обрабатывающих связанные данные распределенно. Для поддержки таких задач используются специализированные системы распределенной координации. Самым популярным и широко используемым продуктом является Apache Zookeeper.Читать полностью »

Та метрика, которую мы называем «загрузкой процессора» на самом деле многими людьми понимается не совсем верно. Что же такое «загрузка процессора»? Это то, насколько занят наш процессор? Нет, это не так. Да-да, я говорю о той самой классической загрузке CPU, которую показывают все утилиты анализа производительности — от диспетчера задач Windows до команды top в Linux.

Вот что может означать «процессор загружен сейчас на 90%»? Возможно, вы думаете, что это выглядит как-то так:

Вы неверно измеряете загрузку процессора - 1

А на самом деле это выглядит вот так:

Вы неверно измеряете загрузку процессора - 2

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

Сделано в России

Один из самых быстрых способ межпроцессного взаимодействия реализуется при помощи разделяемой памяти (Shared Memory). Но мне казалось не логичным, что в найденных мною алгоритмах, память всё равно нужно копировать, а после перезапуска клиента (причём он допускался только один) нужно перезапускать и сервер. Взяв волю в кулак, я решил разработать полноценный клиент-сервер с использованием разделимой памяти.
Читать полностью »

Разрабатывая приложение на node.js столкнулся с необходимости обмена сообщениями между процессами одной машины. В такой ситуации обычно я применял redis Pub/Sub, бонусом получая возможность масштабирования на несколько серверов. Но сейчас встал вопрос именно о локальном обмене и его производительности.

Я решил исследовать существующие варианты обмена сообщениями. Задача эта достаточно стандартна и известна как IPC (Inter Process Communications). Но что можно сделать на js и на какую производительность при этом рассчитывать?

Проведя серию тестов и получив результаты решил поделиться ими с читателим. Заинтересованных прошу под кат.
Читать полностью »

7 октября 2014 года в публичном доступе появились исходники Qt-модуля QtRemoteObjects. Модуль создан в недрах Ford Motor Company (автор Brett Stottlemyer). Вещь, на мой взгляд, очень перспективная. Модуль позволяет, например, передавать сигналы между объектами по сети. Но этим возможности модуля не ограничиваются. Более точно суть модуля описывает его предыдущее наименование — Replica, так как объекты «реплицируются» между процессами.

Межпроцессная репликация объектов с помощью QtRemoteObjects - 1

Ключевой идеей QtRemoteObjects, которая качественно отличает его от других способов межпроцессного взаимодействия/удаленного вызова процедур, является идея полностью продублировать Qt-объект в другие процессы. Это значит, что все изменения свойств (properties) в объекте — источнике отражаются (с уведомлением посредством сигналов) в объекте-реплике. Любые сигналы, которые эмитируются объектом-источником будут также эмитированы в каждом объекте-реплике. Также можно устанавливать свойства, вызывать слоты и в объекте-реплике, при этом запросы отправляются объекту-источнику, который их обрабатывает и затем изменения отражаются в других объектах-репликах посредством сигналов или с помощью изменения свойств. В результате все объекты (включая объект-источник) синхронизируются. При этом вся сложность межпроцессного взаимодействия скрыта внутри QtRemoteObjects.
Читать полностью »

PHP IPC — Межпроцессное взаимодействие в PHP

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

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

Читать полностью »

image
В начале работы junior разработчиком мне пришлось столкнуться с таким малопонятным для меня на то время понятием, как Inter-Process Communication. Это была полная дикость для начинающего программиста, который и в рамках логики одного приложения ориентировался то с большим трудом. Стоит упомянуть, что проект написан на Delphi, а сам механизм IPC реализован с помощью File Mapping и Windows Messages.
Что удивительно, узнал я том, как вся эта система работает изнутри, спустя едва ли не год, когда пришлось маленько с ней повозиться. И только тогда я окончательно осознал, насколько высококлассной была её реализация, а API – удобен. Кому интересна реализация чего-то похожего на вышеупомянутую систему под С# – прошу под кат.
Читать полностью »

Предыстория

В процессе разработки одного B2B проекта возникла необходимость обращения к нашему приложению из различных систем вроде 1C, Oracle, MS Sql Server. Первый «универсальный» вариант, который пришел в голову – использовать веб-сервисы. Но, к сожалению, у вышеупомянутых систем несколько разное понимание этого стандарта (например, не факт, что тот же oracle и 1C будут понимать друг друга), кроме того нам не хотелось раздувать проект использованием тяжелых сторонних библиотек (на тот момент мы уже использовали boost и Intel TBB, притягивать же еще Qt или gSoap нам не хотелось).
Поэтому было решено писать свой велосипед.
Читать полностью »

В данной статье мы попытаемся описать свой опыт работы с AIDL в Android IPC.
В ней содержится пример приложения с сервисом, который запущен в отдельном процессе.

Статью стоит рассматривать как:

  • пример архитектуры приложения, использующего remote Android Services и AIDL.
  • полезные примеры кода.
  • исключительно как дополнение к основной документации на Android Developers (см. ссылки в конце статьи).

Базовые понятия

Service – это компонентAndroid приложения без интерфейса пользователя, предназначенныйдля осуществления ресурсоемких и/или длительных операций.

Типы Android сервисов


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js