Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 2494|Відповідь: 1

[Чайови] Дві-три речі про спільну пам'ять

[Копіювати посилання]
Опубліковано 23.07.2024 14:50:48 | | | |
Участь у переміщенні старої системи, де спільна пам'ять використовується для комунікації між процесами (наприклад, виклик Window Service ASP.NET), і змушений усвідомити важливість цієї технології. Непопулярна технологія розробників NET, спеціальні примітки.

[Що таке спільна пам'ять?] 】
Існує термін для міжпроцесної комунікації — Interprocess Communictaion (IPC), який має такі опції на платформі Windows: Джерело:Вхід за гіперпосиланням видно.

Буфер обміну
Програма А вставляє вміст у буфер обміну, а Програма Б отримує його з буфера обміну.
COM
OLE Compound Document дозволяє вбудовувати файли Word у робочі аркуші Excel, а Excel можна викликати для редагування двома кліками.
Копія даних
Програма A надсилає WM_COPYDATA повідомлень до Програми B у погодженому форматі
DDE
DDE — це протокол зв'язку, який дозволяє різним додаткам обмінюватися даними у різних форматах, що можна розглядати як розширення буфера обміну і передаватися безперервно, окрім одноразових передач. (Відносно погана продуктивність, більше не рекомендують)
Відображення файлів
Файлове відображення означає імітацію файлу як частини пам'яті в процесі, коли кілька додатків обмінюються даними через спільне відображення файлів, що називається Named Shared Memory, що є найкращою продуктивністю серед різних методів IPC, але має бути унеможливлене за допомогою механізмів синхронізації, таких як Mutex.
Поштові слоти
Односторонній зв'язок: Mailslot Client надсилає повідомлення на Mailslot Server, і повідомлення видаляються після читання сервером, що підтримує міжмашинну передачу, а також може передаватися один до багатьох. (Довжина широкомовного повідомлення обмежена 400 байтами, а довжина повідомлення визначається сервером Mailslot при встановленні для передачі один на один)
Труби
Двонаправлена передача поділяється на анонімну трубу та іменовану трубу. Анонімна труба зазвичай використовується для стандартної орієнтації вводу/виводу між батьківською програмою та дочірньою програмою, і для двонаправленого зв'язку слід будувати два канали, які не можуть проходити через мережу і обмежені процесами з залежними зв'язками. Іменована труба може використовуватися для обміну даними між будь-якими процесами та підтримувати міжмережеву передачу процесів.
RPC
Віддалений виклик процедур (RPC) дозволяє додаткам викликати функції, надані іншими застосунками, і їх можна викликати між мережами. Windows RPC відповідає стандарту ISO DCE та підтримує інтеграцію між крос-операційними системами.
Сокети Windows
Абстрактний комунікаційний інтерфейс на основі TCP/IP або інших мережевих протоколів, а обмін даними здійснюється через мережеві з'єднання на нижньому рівні.
Спільна пам'ять — це поширений метод обміну даними, який використовують розробники C/C++ (Google може знайти багато прикладів IPC, реалізованого з Shared Memory на Linux), тому розробники C/C++ часто обирають її як канал комунікації на платформі Windows.

【Практична вправа на спільну пам'ять】
Хоча користувачів менше, .NET має вбудований простір імен System.IO.MemoryMappedFiles, грати в Shared Memory неважко, майже так само, як і в операційні файли, якщо у вас є досвід у операціях, пов'язаних із FileStream, можна швидко почати, дивіться приклад MSDN, я написав маленьку програмну вправу.Вхід за гіперпосиланням видно.

Я написав дві програми: ProcessA, щоб створити простір у 1024 байти за допомогою MemoryMappedFile.CreateNew() і практикувати передачу та захоплення з іншим ProcessB. Оскільки 1024 байти спільно використовуються двома програмами, я планую, щоб перші 512 були записані ProcessA у ProcessB, а останні 512 — ProcessB — для читання ProcessA, а програма використовує CreateViewStream для передачі початкової адреси та довжини, щоб вказати на власну область. Щоб уникнути конфліктів читання/запису при зверненні ProcessA і ProcessB до MemoryMappedFile, я використовую блокування Mutex, щоб контролювати, що лише один Процес може одночасно отримати доступ до MemoryMappedFile. Тестовий процес створює MemoryMappedFile для ProcessA, записує рядок повідомлення — > ProcessB читає рядок повідомлення і записує рядок відповіді — > ProcessA читає рядок відповіді і завершує його.

Процедура ProcessA виглядає так:

Процедура ProcessB виглядає так:

Тест пройшов успішно!



【Додаткові поради】

1. Як переглянути MemoryMappedFile, який наразі увімкнений у Windows?

SystemInternals має інструмент AccessChk, який перелічує всі файли, папки, реєстри, об'єкти та сервіси Windows, доступні для Windows. MemoryMappedFile — це об'єкт Windows, і ви можете скористатися наступною командою, щоб перелічити всі об'єкти та архівувати їх
accesschk -osv > e:\objList.txt
Знайдіть у ньому назву MemoryMappedFile, і якщо вона існує, ви побачите запис, схожий на наступний:
\Sessions\1\BaseNamedObjects\DARKTHREAD
  Тип: Секція
  Середній обов'язковий рівень (за замовчуванням) [без запису]
  RW NT AUTHORITY\SYSTEM
    SECTION_ALL_ACCESS
  RW DOMAIN\Ім'я користувача
    SECTION_ALL_ACCESS
  RW ДОМЕН\Ім'я користувача-S-1-5-5-0-954410
    SECTION_ALL_ACCESS

Завантажити інструмент AccessChk:Вхід за гіперпосиланням видно.

2. Пресет MemoryMappedFile увімкнений у сесії користувача, і цей сет не може використовуватися між сесіями. Наприклад, якщо два ASP.NET, що належать до різних AppPool, мають різні ідентичності виконання, навіть якщо ім'я MemoryMappedFile однакове, це все одно одна копія кожного, тому необхідно підтвердити, що ідентичність виконання, яку використовують обидві сторони, однакова.

3. Щоб взаємодіяти між різними ідентичностями виконання, MemoryMappedFile можна назвати «Global\ Filename» (зверніть увагу, що випадок Global відрізняється, я наступив на грім, який помилково записався як некоректний шлях GLOBAL), щоб до нього можна було звертатися до нього через ідентичності виконання.
Однак слід зазначити, що процеси, окрім Session 0 (Windows Service), повинні мати дозвіл SeCreateGlobalPrivilege для створення Global\... MemoryMappedFile。 (Файл MSDN)
Для сесії 0 ви можете звернутися до цієї статті MVP з іншого боку — Проникнення ізоляції сесії 0 (1) (Вхід за гіперпосиланням видно.У ньому є дуже детальний вступ.

Перевидано з:Вхід за гіперпосиланням видно.





Попередній:Проблема статичного навантаження ресурсів Angular 18 зображень
Наступний:Отримайте короткий огляд структури вмісту файлів Bootstrap 5
 Орендодавець| Опубліковано 10.08.2024 21:36:57 |
.NET/C# реалізує програму singleton на основі Mutex і MemoryMappedFile
https://www.itsvse.com/thread-10808-1-1.html
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com