К вопросу о тесте на инверсию приоритетов, его исходных кодах, результатах выполнения и т.д. - я, наконец, поимел возможность выложить всё это с подробными описаниями:
http://qnxclub.net/modules.php?name=Content&pa=showpage&pid=5
на вскидку - маловато статистики, после старта нитки делается пауза в 1 мс при том что тик в XP - 10мс, сам старт занимает предположительно не меньше тика.
Первоначально опубликовано Olej
Что ещё может быть интересно? Это то, что в 1-м результате (диспетчирование потоков равного приоритета) наблюдается некоторые «перебои»… Аналогичное тестирование для QNX давало отчётливую периодическую последовательность:
Чем вызваны "перебои" вызваны перебои - очевидно. Отсутсвием семафоров. Различное поведение под вин и qnx может быть вызвано как разной величиной тика, так и, возможно, разной производительностью/параметрами компиляторами.
Т.е. претензия - не указан компилятор/опции компилятора и системный квант времени.
SY,
EK
Первоначально опубликовано evgen
ну так возмите исходники [f]open и посмотрите чего они зовут от системы и подумайте на досуге над отличием костюмчика от того, на чем оно сидит.
В том-то и прелесть стандартизации, в том числе и POSIX, что при её наличии вот это "посмотрите" - это занятие только для извращенцев, для мазохистов (но это мы уже об другом предмете): в диаметрально противоположных OS - клиент-серверной микроядерной QNX и моноядерной Linux - мне нет нужды смотреть как выполнен fopen - он работает одинаково, и именно так, как стандарт предписывает, для чего он (стандарт) только и нужен!
Первоначально опубликовано Olej
Первоначально опубликовано evgen
ну так возмите исходники [f]open и посмотрите чего они зовут от системы и подумайте на досуге над отличием костюмчика от того, на чем оно сидит.
В том-то и прелесть стандартизации, в том числе и POSIX, что при её наличии вот это "посмотрите" - это занятие только для извращенцев, для мазохистов (но это мы уже об другом предмете): в диаметрально противоположных OS - клиент-серверной микроядерной QNX и моноядерной Linux - мне нет нужды смотреть как выполнен fopen - он работает одинаково, и именно так, как стандарт предписывает, для чего он (стандарт) только и нужен!
дя?
во-первых, даже для fopen'а есть ньюансы типа "r"/"rb", во-вторых, для функций типа read/write ньюансов еще больше, в частности, когда хендл - не файловый хендл, а, например, на самом деле сокет.
Что уж говорить о такой тонкой материи, как временные зависимости в работе ниток/семафоров
SY,
EK
Первоначально опубликовано Olej
Первоначально опубликовано evgen
ну так возмите исходники [f]open и посмотрите чего они зовут от системы и подумайте на досуге над отличием костюмчика от того, на чем оно сидит.
В том-то и прелесть стандартизации, в том числе и POSIX, что при её наличии вот это "посмотрите" - это занятие только для извращенцев, для мазохистов
кстати о птичках. реализации большого количества стандартных функций для однониточной и многониточных программ отличаются, что приводит к достаточно большому числу "тонких эффектов". Один из них, например, приводит к различию скорости выполнения, по моим наблюдениям - до двух раз.
SY,
EK
Первоначально опубликовано evgen
Чем вызваны "перебои" вызваны перебои - очевидно. Отсутсвием семафоров. Различное поведение под вин и qnx может быть вызвано как разной величиной тика, так и, возможно, разной производительностью/параметрами компиляторами.
Не совсем верно, семафоры, мютексы и др. объекты синхронизации использовать тут нельзя, июо это сразу приведет к серии переключений контекстов, а надо бы как и в QNX варианте использовать атомарные функции или критические секции...
Вы не пробовали запустить такой тест по OS/2?
У меня тоже появился вопрос, я модифицировал виндовый вариант программы, добавив критичесские секции на обращение к буферу и запретил динамическое присваивание приоритетов, но тем неменее при увеличении длительности цикла получил такой вариант:
c:\work\Visual C++ Projects\InvW\Debug>invw +6
inverse test, Win32 API, vers.1.03
repeating number = 5000000, lock on mutex
111101111110000000002222222222
c:\work\Visual C++ Projects\InvW\Debug>invw +7
inverse test, Win32 API, vers.1.03
repeating number = 50000000, lock on mutex
101111111110000000002222222222
попадание управления к 0 потоку, когда "властвует" 1 уже говорит о плохой предсказуемости win32 в смысле диспетчеризации...
Draggan
Kharkov, QNX Seminars
Первоначально опубликовано Draggan
попадание управления к 0 потоку, когда "властвует" 1 уже говорит о плохой предсказуемости win32 в смысле диспетчеризации...
Здесь не совсем уместно говорить о "плохой предсказуемости" - каждое переключение контекста есть строго детерминированный процесс, и всё поведение их совокупности тоже детерминировано... Но составляющих этого процесса становится так много (может процесс свопинга или мапирования страниц включиться, динамическое поведение приоритетов, обработчики прерываний: таймер, например...) - что, помните, я говорил о "сложности" системы - её поведение под стать предсказывать уже статистически.
При чем тут переключение контекста? Когда я даю одному потоку приоритет выше чем другому, я имею в виду, что он должен выполняться первым, если конечно может. Вопрос, в том, что останавливает поток 1, даже на краткий период времени, потому, как даже один цикл потока 0 не проходит...
Это означает, что у активного потока возможны задержки выполнения, причем причины этих задержек далеко не очевидны...
Именно об этом я говорил как о плохой предсказуемости, хотя это все уже известно и до меня...
Да, сделал я объект синхронизации под виндой, убирающий инверсию приоритетов путем наследования. Ознакомиться можно здесь:
http://qnxclub.net/modules.php?name=Forums&file=viewtopic&p=72#72
Сразу скажу код несколько сыроватый, но работает. Принимаю любые замечания и рекомендации.
:)
Draggan
Kharkov, QNX Seminars
Первоначально опубликовано Draggan
При чем тут переключение контекста? Когда я даю одному потоку приоритет выше чем другому, я имею в виду, что он должен выполняться первым, если конечно может. Вопрос, в том, что останавливает поток 1, даже на краткий период времени, потому, как даже один цикл потока 0 не проходит...
При том, что даже при выполнении 1-го потока высокого приоритета - у вас всё равно будут переключения контекста: по timeslice, например, когда планировщик должен пересмотреть списки готовых к выполнению потоков... и принять решение вернуть управление тому же, который только что прервали.
Первоначально опубликовано Olej
К вопросу о тесте на инверсию приоритетов, его исходных кодах, результатах выполнения и т.д. - я, наконец, поимел возможность выложить всё это с подробными описаниями:
http://qnxclub.net/modules.php?name=Content&pa=showpage&pid=5
гм...анонимусов вы там запретили..
при попытке зарегистрироваться приходит сообщение
new spam received: дЮММШЕ ДКЪ ЮЙРХБХГЮЖХХ ЮЙЙЮСМРЮ
....
Spam detection software, running on the system "ocean.is47.com", has
identified this incoming email as possible spam. The original message
has been attached to this so you can view it (if it isn't spam) or block
similar future email. If you have any questions, see
the administrator of that system for details.
============
оригинально - да ?
Далее идет
"Добро пожаловать Харьковский"
и ссылка для активизации....при тыканьи в которую получаем
"Пользователя с такими данными в нашей базе данных не найдено." мда... а сама статья стала совсем нечитабельна, вероятно
<meta NAME="GENERATOR" CONTENT="OpenOffice.org 1.1.0 (Win32)">
с русской языкой несколько не в ладах
SY,
EK
Первоначально опубликовано evgen
гм...анонимусов вы там запретили..
Не запретили, а запретили им писать в обсуждение - согласитесь, это 2 большие разницы, нет?
Первоначально опубликовано evgen
при попытке зарегистрироваться приходит сообщение
Я надеюсь, что это - артефакт ;) - там действительно шла перманентная реконструкция, вы, наверное "под неё" попали :(.
Первоначально опубликовано evgen
мда... а сама статья стала совсем нечитабельна, вероятно
<meta NAME="GENERATOR" CONTENT="OpenOffice.org 1.1.0 (Win32)">
с русской языкой несколько не в ладах
Виноват, это я недосмотрел - текст в UNICODE, его можно читать, подстроив браузер - но это, конечно - лишнее. В 1-2 дня текст будет заменен на нормальный (в кодировке 1251). Но там рядом - лежит PDF текст - это дубликаты, вы можете легко прочитать его.
Но за время с написания статьи:
- она вызвала обсуждения и уточнения, которые, как мне кажется - интереснее самой статьи;
- во след, по итогам и нашего с вами обсуждения, написана и выложена новая статья (на сегодня, пока - только PDF):
http://qnxclub.net/modules.php?name=Forums&file=viewtopic&t=16
- и ещё одна, на ту же тематику, нашего коллеги из Монреаля - у меня на руках для чтения и рецензии, будет выложена после минимальной (грамматической) правки в 5-7 дней.
Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме