быстрая синхронизация потоков Linux - PullRequest
0 голосов
/ 04 декабря 2018

Мой вопрос очень похож на этот здесь .Но так как это было задано 8 лет назад, мне было интересно, есть ли лучшие способы.Также я новичок в программировании на Linux, поэтому, пожалуйста, будьте осторожны!

Мой сценарий такой, как показано ниже -

enter image description here

Выполненные операции-

  1. Процесс 1 и 2 созданы с 3 потоками.Потоки в процессе 2 немедленно переводятся в спящий режим.
  2. Потоки процесса 1 сопоставляются с ядром 1, потоки процесса 2 сопоставляются с ядром 2.
  3. Поток в процессе 1 ставит сообщение в общий доступочередь памяти и уведомляет (в настоящее время через фьютексы) Процесс 2.
  4. Поток в Процессе 2 просыпается, чтобы удалить сообщение из очереди.

Как видно изиспользование futexs, я концентрируюсь на задержке пробуждения потока.Моя цель состоит в том, чтобы время, необходимое для шагов 3 и 4, составляло <<strong> 3 микросекунды .

Ниже приведены результаты, которые я смог получить для шагов 3 и 4, используя различные IPC.механизмы синхронизации -

мьютексы Posix + переменные состояния - среднее значение 14,14 микросекунды

каналы - среднее значение 28,54 микросекунды

Futexs - среднее значение 12,48 микросекунды

Я знаю, что эти результаты очень субъективны и будут варьироваться от машины к машине.Что мне нужно, так это предложения о том, как я могу сделать шаги 3 и 4 еще быстрее?

До сих пор я изучал -

  • фьютексы
  • мьютексы
  • условия
  • семафоры
  • спин-блокировки (их нельзя использовать, поскольку потоки в процессе 2 уже спят)

Пожалуйста, помогите !!

Предположим, что архитектура не может быть изменена, т. Е. Должно быть два процесса с потоками.Все остальное можно изменить.

...