Недавно я провел сравнение задержек для этих двух установок: a) Ubuntu 16.04, работающий на 12-ядерном хосте; б) гостевой QNX, на котором запущена VMware на хост-компьютере ноутбука (4 ядра назначены для виртуальной машины QNX). У меня нет лучшей настройки для QNX.
Тестовый сценарий: работает 10 потоков, каждый поток отправляет отправлять сообщение в случайно выбранный принимающий поток каждые 30 мс-i sh - очень низкая скорость передачи сообщений; Механизм сообщений реализован с использованием условных переменных, и каждый поток имеет свою собственную выделенную очередь-получателя rx и свою собственную условную переменную и мьютекс, поэтому нет помех между очередями. Я измеряю время между созданным / отправленным сообщением и получающим потоком, получающим сообщение. Среднее и std_dev min max все фиксируются для каждого потока.
Результат удивительно благоприятствует QNX (хотя он работает на виртуальной машине). 10US против 40US.
для потока в Linux (секунды): среднее значение = 0,000038076 std_dev = 2,7523e-05 мин = 0,000000254 макс = 0,000177410 sampleSize = 1023 для потока QNX (секунды): среднее = 0,000011351 std_dev = 0,000105937 мин = 0,000000000 макс. = 0,000999987 sampleSize = 969
Я заметил, что сторона QNX на часах не такая точная (с точки зрения разрешения), как сторона Linux, поскольку я вижу, что измеряемая минимальная задержка равна 0.
Мне просто интересно, соответствует ли это опыту других людей - Linux поток условного пробуждения в среднем занимает 40us? Кстати, если точность времени QNX в 100 мсек, а Linux - в наносексе c, влияет ли эта разница на стат? Спасибо.