Підключення циклічного зворотного зв'язку до продуктивності Unix Domain Socket


116

Робота над додатком на базі Android та iOS, який потребує зв'язку з сервером, що працює на тому ж пристрої. В даний час використовується з'єднання із зворотним зв'язком TCP для спілкування з додатком та сервером (додаток написано на рівні користувача, сервер написаний на C ++ за допомогою Android NDK)

Мені було цікаво, чи замінить взаємозв'язок на сокет Unix Domain покращить продуктивність?

Або взагалі чи є якісь докази / теорії, які підтверджують, що сокет Unix Domain дав би кращу продуктивність, ніж з'єднання з циклом TCP?


3
Пам’ятайте, що локальним сокетам (розетки домену UNIX) потрібен файл у файловій системі. Використання адреси циклу TCP зберігає все це в пам'яті. І якщо вам доведеться використовувати віддалені сокети TCP, можливо, буде простіше інтегрувати інший сокет TCP, а не поспілкуватися з новим сімейством сокетів та адресами.
Якийсь програміст чувак

1
@JoachimPileborg При розробці тільки для Linux (Android) є можливість використовувати абстрактні адресати розеток домену UNIX, яким не потрібен файл у файловій системі.
thuovila

см stackoverflow.com/questions/14643571 / ... для андроїда зв'язку.
RDX

8
@Someprogrammerdude Їм потрібен файл у файловій системі, але це не означає, що все йде на диск і назад.
Маркіз Лорн

3
@Someprogrammerdude У файловій системі зберігається лише ім’я файлу, інформація про право власності та дозволи. Вся фактична передача даних відбувається повністю в пам'яті.
Jesin

Відповіді:


105

Так, локальна міжпроцесорна комунікація через сокети домену Unix повинна бути швидшою, ніж зв'язок через зворотний зв'язок з локальним хостом, оскільки у вас менше накладних витрат TCP, дивіться тут .


12
перша посилання посилається на другу посилання, яка є з 2005 року (стара). і він охоплює лише FreeBSD
Janus Troelsen

7
Ця відповідь помилкова, коли тестований цикл tcp на сучасному Linux є таким же швидким, а іноді і швидшим, ніж UDS. при необхідності можна надати орієнтир
easytiger

10
Ця відповідь абсолютно правильна. Інтерфейс зворотного зв’язку все ще є TCP, це означає, що ви все ще маєте накладні витрати TCP (контроль перевантаженості, контроль потоку, управління потоком (впорядкування IP-пакетів, повторна передача тощо)). Розетки домену Unix не роблять нічого з перерахованого вище, тому що він був розроблений з нуля для локального запуску, це означає, що немає проблем із перевантаженням, немає різниці в швидкості між сервером / клієнтом, які потребують контролю потоку, відсутні скинуті пакети тощо. Google це, якщо сумніваєтеся , не нова річ.
JSON

4
Що з місцевим UDP?
CMCDragonkai

2
враховуючи, що перше посилання мертве (HTTP 404) ... ось чому найкраща практика stackoverflow полягає у тому, щоб принаймні надати коротку / стислу відповідну цитату з вихідної URL-адреси під час написання відповіді (тоді, коли посилання переходить вниз короткий підсумок все ще доступний).
Тревор Бойд Сміт

80

Цей орієнтир: https://github.com/rigtorp/ipc-bench забезпечує тести на затримку та пропускну здатність для сокетів TCP, Unix Domain Sockets (UDS) та PIPE.

Here you have the results on a single CPU 3.3GHz Linux machine :

TCP average latency: 6 us

UDS average latency: 2 us

PIPE average latency: 2 us

TCP average throughput: 0.253702 million msg/s

UDS average throughput: 1.733874 million msg/s

PIPE average throughput: 1.682796 million msg/s

66% скорочення затримки та майже в 7 разів більше пропускної здатності пояснюють, чому більшість критично важливих для роботи програмних засобів мають власний спеціальний протокол IPC.


7
Мені здається, що їхній продукт - це відповідь на проблему! Можливо, тому вони відповідають на ці запитання; бо вони знають відповідь.
GreenReaper

Це чудова відповідь, оскільки вона має деякі цифри. Пропускна здатність від TCP до UNIX на 350% краща, UNIX до PIPE 40% на i5.
ScalaWilliam

13
@GreenReaper Відповідь справді актуальна, але лінійка нашого продукту Torusware Speedus ... оснащена двома версіями, Speedus Lite та Speedus Extreme Performance (EP) - це не так, і все це звучить як дешева реклама.
Дмитро Григор’єв

3
Спам. І ні, його продукт не є релевантним у порівнянні між сокетами TCP та Unix. Є багато альтернатив для здорових глуздів розеткам - кожен поза тим, що просить ОП
JSON

Використання цього інструменту недостатньо пояснено. Чи є якась сторінка, що пояснює, як викликати клієнта та сервера?
falkb

40

Redis тести показують доменний сокет Unix може бути значним швидше , ніж TCP шлейф.

Коли серверні та клієнтські програми з орієнтиром запускаються в одному і тому ж вікні, можна використовувати як розетки TCP / IP, так і розетки домен Unix. Залежно від платформи, розетки доменів Unix можуть досягти приблизно на 50% більше пропускної здатності, ніж циклічний зворотний зв'язок TCP / IP (наприклад, у Linux). Типовою поведінкою паралельної функції Redis є використання циклічного зворотного зв'язку TCP / IP.

Однак ця різниця має значення лише тоді, коли пропускна здатність висока.

Пропускна здатність на один розмір даних


8

Сокети домену Unix часто вдвічі швидші, ніж розетки TCP, коли обидва однорангові перебувають на одному хості. Протоколи домену Unix - це не фактичний набір протоколів, а спосіб здійснення зв'язку клієнт / сервер на одному хості, використовуючи той самий API, який використовується для клієнтів та серверів на різних хостах. Протоколи домену Unix є альтернативою методам міжпроцесорних комунікацій (IPC).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.