Спасибо за статью. У вас проблема в 130-ой строчке кода сервера. Нельзя вызывать IsCanceled() для асинхронного режима взаимодействия. Поэтому пример падает.
Можно вызывать только после получения тэга AsyncNotifyWhenDone из cq
IsCancelled is always safe to call when using sync or callback API. When using async API, it is only safe to call IsCancelled after the AsyncNotifyWhenDone tag has been delivered. Thread-safe.
Коллеги всем спасибо за коментарии. Вижу, что тема оказалась интересна. Замечу, что тест не претендует на звание всеобъемлющего критерия сравнения ОСРВ.
По поводу чрезмерной загрузки системы при смене значения системного тика на QNX. Да нагрузка возросла, но на удивление, не всё так плохо.
Общая загрузка системы: 8.2%, ядро: 0.3%, сам тест: 1.4%
Действительно не рекомендуется менять тик ниже 1 мс. Но мне было интересно поработать на временном интервале 500 мкс, а такого значения при тике 1 мс не получить. Опытным путём выяснилось, что погрешность перепланирования для QNX в этом тесте находится в рамках одного тика. Поэтому был выбран минимальный.
Information
Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Спасибо за статью. У вас проблема в 130-ой строчке кода сервера. Нельзя вызывать IsCanceled() для асинхронного режима взаимодействия. Поэтому пример падает.
Можно вызывать только после получения тэга AsyncNotifyWhenDone из cq
IsCancelled is always safe to call when using sync or callback API. When
using async API, it is only safe to call IsCancelled after the
AsyncNotifyWhenDone tag has been delivered. Thread-safe.
if(ctx_.IsCancelled() || mcounter >= greeting.size())
...
Коллеги всем спасибо за коментарии. Вижу, что тема оказалась интересна. Замечу, что тест не претендует на звание всеобъемлющего критерия сравнения ОСРВ.
По поводу чрезмерной загрузки системы при смене значения системного тика на QNX. Да нагрузка возросла, но на удивление, не всё так плохо.
Общая загрузка системы: 8.2%, ядро: 0.3%, сам тест: 1.4%
Действительно не рекомендуется менять тик ниже 1 мс. Но мне было интересно поработать на временном интервале 500 мкс, а такого значения при тике 1 мс не получить. Опытным путём выяснилось, что погрешность перепланирования для QNX в этом тесте находится в рамках одного тика. Поэтому был выбран минимальный.