Мой вопрос очень похож на этот здесь .Но так как это было задано 8 лет назад, мне было интересно, есть ли лучшие способы.Также я новичок в программировании на Linux, поэтому, пожалуйста, будьте осторожны!
Мой сценарий такой, как показано ниже -
Выполненные операции-
- Процесс 1 и 2 созданы с 3 потоками.Потоки в процессе 2 немедленно переводятся в спящий режим.
- Потоки процесса 1 сопоставляются с ядром 1, потоки процесса 2 сопоставляются с ядром 2.
- Поток в процессе 1 ставит сообщение в общий доступочередь памяти и уведомляет (в настоящее время через фьютексы) Процесс 2.
- Поток в Процессе 2 просыпается, чтобы удалить сообщение из очереди.
Как видно изиспользование futexs, я концентрируюсь на задержке пробуждения потока.Моя цель состоит в том, чтобы время, необходимое для шагов 3 и 4, составляло <<strong> 3 микросекунды .
Ниже приведены результаты, которые я смог получить для шагов 3 и 4, используя различные IPC.механизмы синхронизации -
мьютексы Posix + переменные состояния - среднее значение 14,14 микросекунды
каналы - среднее значение 28,54 микросекунды
Futexs - среднее значение 12,48 микросекунды
Я знаю, что эти результаты очень субъективны и будут варьироваться от машины к машине.Что мне нужно, так это предложения о том, как я могу сделать шаги 3 и 4 еще быстрее?
До сих пор я изучал -
- фьютексы
- мьютексы
- условия
- семафоры
- спин-блокировки (их нельзя использовать, поскольку потоки в процессе 2 уже спят)
Пожалуйста, помогите !!
Предположим, что архитектура не может быть изменена, т. Е. Должно быть два процесса с потоками.Все остальное можно изменить.