Быстрое межпроцессное событие в net ядре - PullRequest
0 голосов
/ 03 августа 2020

Я использую файл сопоставления памяти между многими процессами в качестве общей очереди с несколькими записывающими устройствами и несколькими устройствами чтения. На Windows я использую именованный EventWaitHandle для отправки сигнала о том, что в очереди могут быть новые сообщения, поэтому подписчики должны проснуться и проверить очередь на наличие возможных сообщений.

Однако на Linux и macOS с именем EventWaitHandles не поддерживаются. Какие у меня варианты?

До сих пор я пробовал:

  1. Named Semaphore - не поддерживается в Linux и macOS
  2. FileSystemWatcher - работает, но относительно медленно. (около 10ms на моем Macbook для получения уведомления об изменении файла).
  3. Named Mutex - хотя именованные мьютексы поддерживаются на всех платформах, я не могу понять шаблон использования, который позволяет мне повторить поведение AutoResetEvent. Есть ли он?
  4. Опрос (проверка сообщений + спящий режим в al oop) - это работает, но если засыпание длится дольше 2 мс, я не достигну своей цели по производительности.
  5. Futex - кажется очень низким уровнем для того, что мне нужно. Будет ли он работать как на Linux, так и на MacOS? И могу ли я каким-то образом p/invoke из приложения .net core?

Есть другие предложения?

...