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

IPC: сокеты против именованных каналов

Системное программирование
Абсолютные числа большого смысла не имеют, но как сравнение информация представляет некоторую ценность

Условия


Windows 7 x64 с обновлениями
AMD Athlon X2 4600+ (2.41ГГц)
DDR2 2Гб
.Net Framework 3.5, классы из FCL.
Два 64-битных процесса без дополнительных привилегий.
Антивирус Касперского выключен. С ним результаты сокетов существенно хуже.
Сокеты и именованные каналы в асинхронном режиме.
Размеры буферов подбирались оптимальные, эксперементально для каждого вида IPC.
Читать дальше →
Всего голосов 34: ↑28 и ↓6 +22
Просмотры28.8K
Комментарии 76

Использование unix pipes для отображения прогресса выполнения нативного кода на Android'е

Разработка под Android
В одном из проектов мне понадобилось отслеживать прогресс выполнения нативного кода на Android'е (конкретно — портированного FFmpeg'а). Ситуация осложнялась также тем, что по ряду причин код выполнялся в нескольких процессах.

Читать дальше →
Всего голосов 49: ↑42 и ↓7 +35
Просмотры1.7K
Комментарии 12

Знакомство с межпроцессным взаимодействием на Linux

Программирование
Межпроцессное взаимодействие (Inter-process communication (IPC)) — это набор методов для обмена данными между потоками процессов. Процессы могут быть запущены как на одном и том же компьютере, так и на разных, соединенных сетью. IPC бывают нескольких типов: «сигнал», «сокет», «семафор», «файл», «сообщение»…

В данной статье я хочу рассмотреть всего 3 типа IPC:
  1. именованный канал
  2. разделенная память
  3. семафор
Отступление: данная статья является учебной и расчитана на людей, только еще вступающих на путь системного программирования. Ее главный замысел — познакомиться с различными способами взаимодействия между процессами на POSIX-совместимой ОС.
Читать дальше →
Всего голосов 79: ↑78 и ↓1 +77
Просмотры155.4K
Комментарии 22

AIDL (Android Interface Definition Language) и коммуникация между процессами (IPC)

Разработка под Android
Из песочницы
В данной статье мы попытаемся описать свой опыт работы с AIDL в Android IPC.
В ней содержится пример приложения с сервисом, который запущен в отдельном процессе.
Читать дальше →
Всего голосов 27: ↑26 и ↓1 +25
Просмотры31.5K
Комментарии 7

Пишем кроссплатформенную библиотеку на C++ для работы с именованными каналами

ПрограммированиеC++
Из песочницы

Предыстория


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

Простой Inter-Process Communication на C#

.NETC#
Из песочницы
image
В начале работы junior разработчиком мне пришлось столкнуться с таким малопонятным для меня на то время понятием, как Inter-Process Communication. Это была полная дикость для начинающего программиста, который и в рамках логики одного приложения ориентировался то с большим трудом. Стоит упомянуть, что проект написан на Delphi, а сам механизм IPC реализован с помощью File Mapping и Windows Messages.
Что удивительно, узнал я том, как вся эта система работает изнутри, спустя едва ли не год, когда пришлось маленько с ней повозиться. И только тогда я окончательно осознал, насколько высококлассной была её реализация, а API – удобен. Кому интересна реализация чего-то похожего на вышеупомянутую систему под С# – прошу под кат.
Посмотреть
Всего голосов 12: ↑9 и ↓3 +6
Просмотры28.2K
Комментарии 20

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

PHP

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

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

Хотите узнать больше?
Всего голосов 47: ↑42 и ↓5 +37
Просмотры25.7K
Комментарии 78

Делаем вебсокеты на PHP с нуля. Часть 2. IPC

i-Free GroupРазработка веб-сайтовPHP
После написания моей предыдущей статьи Делаем вебсокеты на PHP с нуля я понял, что у сообщества есть некоторый интерес к поднятой мною теме.

В прошлой статье я обещал, что опишу:
  • запуск нескольких процессов для обработки соединений
  • межпроцессное взаимодействие
  • разделение процессов мастер-воркер
  • проксирование вебсокетов с помощью nginx
  • запуск из консоли
  • интеграция с вашим фреймворком на примере yii
  • демонстрация


И, как обычно, — получившийся код и ссылка на демонстрационный чат в конце статьи.
Читать дальше →
Всего голосов 25: ↑22 и ↓3 +19
Просмотры36.2K
Комментарии 15

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

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



Ключевой идеей QtRemoteObjects, которая качественно отличает его от других способов межпроцессного взаимодействия/удаленного вызова процедур, является идея полностью продублировать Qt-объект в другие процессы. Это значит, что все изменения свойств (properties) в объекте — источнике отражаются (с уведомлением посредством сигналов) в объекте-реплике. Любые сигналы, которые эмитируются объектом-источником будут также эмитированы в каждом объекте-реплике. Также можно устанавливать свойства, вызывать слоты и в объекте-реплике, при этом запросы отправляются объекту-источнику, который их обрабатывает и затем изменения отражаются в других объектах-репликах посредством сигналов или с помощью изменения свойств. В результате все объекты (включая объект-источник) синхронизируются. При этом вся сложность межпроцессного взаимодействия скрыта внутри QtRemoteObjects.
Читать дальше →
Всего голосов 18: ↑17 и ↓1 +16
Просмотры9.7K
Комментарии 9

Производительность межпроцессного обмена сообщениями в node.js

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

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

Проведя серию тестов и получив результаты решил поделиться ими с хабрасообществом. Заинтересованных прошу под кат.
Читать дальше →
Всего голосов 20: ↑20 и ↓0 +20
Просмотры8.3K
Комментарии 4

Ускоряем передачу данных в localhost

Open sourceC++Промышленное программированиеРазработка систем связи
Из песочницы
Recovery mode
Сделано в России

Один из самых быстрых способ межпроцессного взаимодействия реализуется при помощи разделяемой памяти (Shared Memory). Но мне казалось не логичным, что в найденных мною алгоритмах, память всё равно нужно копировать, а после перезапуска клиента (причём он допускался только один) нужно перезапускать и сервер. Взяв волю в кулак, я решил разработать полноценный клиент-сервер с использованием разделимой памяти.
Читать дальше →
Всего голосов 23: ↑22 и ↓1 +21
Просмотры14.9K
Комментарии 9

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

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

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



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



«Работа вхолостую» означает, что процессор способен выполнить некоторые инструкции, но не делает этого, поскольку ожидает чего-то — например, ввода-вывода данных из оперативной памяти. Процентное соотношение реальной и «холостой» работы на рисунке выше — это то, что я вижу изо дня в день в работе реальных приложений на реальных серверах. Есть существенная вероятность, что и ваша программа проводит своё время примерно так же, а вы об этом и не знаете.
Читать дальше →
Всего голосов 95: ↑88 и ↓7 +81
Просмотры51.6K
Комментарии 61

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

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

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

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

Грокаем DLR

Программирование.NETC#
Перевод
Предисловие переводчика

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


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

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


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

Чему я научился, пока работал над своим первым масштабным проектом

Productivity InsideСовершенный кодУчебный процесс в IT
Перевод
Восемь месяцев назад я начал писать приложение на Electron. Чтобы осилить эту задачу, мне пришлось разработать три отдельных суб-приложения, которые запускаются в разных средах. Ниже я расскажу о том, что вынес для себя по ходу дела.



Binder в исходном виде

Контекст


Прежде чем углубляться в подробности, начну с того, что приведу некоторые общие сведения, необходимые для понимания ситуации. В начале 2019 года я стал искать, где бы пройти интернатуру, как того требовала программа co-op для моей степени. К апрелю я разослал несколько десятков резюме, причем каждое было подогнано под конкретного работодателя, и в общей сложности получил ровно ноль ответов. Можете себе представить, как я на это отреагировал – у меня опустились руки, казалось, что я ни на что не гожусь и не стою вообще никакой работы. Но вместо того, чтобы дать этим чувствам одержать верх, я решил доказать самому себе, что кое-что все-таки знаю и на какие-то должности могу претендовать. В конечном итоге, я выяснил, что на деле знаю меньше, чем предполагал.
Читать дальше →
Всего голосов 7: ↑5 и ↓2 +3
Просмотры3.5K
Комментарии 0

Interprocess communication с использованием GRPC

.NET
Tutorial

Сегодня хочу рассказать о нашем пути реализации межпроцессного взаимодействия между приложениями на NET Core и NET Framework при помощи протокола GRPC. Ирония заключается в том, что GRPC, продвигаемый Microsoft как замена WCF на своих платформах NET Core и NET5, в нашем случае случился именно из-за неполноценной реализации WCF в NET Core.


Я надеюсь эта статья найдется поиском когда кто-то будет рассматривать варианты организации IPC и позволит посмотреть на такое высокоуровневаое решение как GRPC с этой, низкоуровневой, стороны.

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

Перевод вводной статьи от разработчиков D-Bus

ПрограммированиеСистемное программирование
Перевод
Tutorial

Это вводная статья о технологии межпроцессного взаимодействия D-Bus, написанная его разработчиками. Дан краткий обзор ключевых моментов технологии. Рекомендуется читать перед изучением спецификации (русский перевод).

Читать далее
Всего голосов 11: ↑10 и ↓1 +9
Просмотры3.2K
Комментарии 2

Как *nix-сигналы позволяют читать память других процессов

Информационная безопасность*nix
Есть такая очень старая и вросшая в *nix с корнями штука под названием «сигналы». Идея этих примитивов очень проста: реализовать программный аналог прерываний. Различные процессы могут посылать сигналы друг другу и самим себе, зная process id (pid) получателя. Процесс-получатель волен либо назначить функцию-обработчик сигнала, которая будет автоматически вызываться при его получении, либо игнорировать его с помощью специальной маски, либо же довериться поведению по умолчанию. So far so good.

Поведение по умолчанию при получении сигнала… А что означают эти успокаивающие слова? Уверен, не то, что вы ожидали. Вики говорит, что обработчики 28 стандартных сигналов (существуют и другие!) по умолчанию таковы: 2 игнорируются, 4 вызывают остановку процесса, 1 – его продолжение, 11 – его завершение, 10 – его завершение с созданием дампа памяти. Вот это уже интересно! Итак, дело обстоит следующим образом: даже если ваша программа никак не упоминает сигналы в исходном коде, на самом деле она их использует, причём весьма драматичным образом.
Читать дальше →
Всего голосов 25: ↑7 и ↓18 -11
Просмотры4.3K
Комментарии 11

Клиент-серверный IPC на Python multiprocessing

PythonПараллельное программированиеРазработка под Linux
Tutorial

Статья отражает личный опыт разработки CLI приложения для Linux.

В ней рассмотрен способ выполнения привилегированных системных вызовов процессом суперпользователя по запросам управляющей программы через строго описанный API.

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

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Просмотры3K
Комментарии 2

Работа с AIDL в Android

Разработка под Android
Tutorial

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

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

Читать далее
Всего голосов 1: ↑1 и ↓0 +1
Просмотры2.8K
Комментарии 2
1