Здравствуйте, biohumanoid, Вы писали:
B>Windows XP, SP2, неблокирующий socket. B>select не возвращает управление раньше чем через 15-16 миллисекунд. B>если запросить 17мс — будет 31-32мсек.
B>Неужто планировщик ОС так плохо справляется ??? B>Linux 2.6 просто наура отрабатывает...
2.6 это не указание. Этой ветке много лет и там много совершенно разных версий. Указывайте точнее, если указываете.
B>возвращает управление через 15-16 мсек, ни разу раньше...
Здравствуйте, netch80, Вы писали: A>2.6 это не указание. Этой ветке много лет и там много совершенно разных версий. Указывайте точнее, если указываете.
2.6.18, 2.6.26, 2.6.30
Все 2.6.x используют timer=250Hz (4ms).
A>Встречный вопрос: а зачем Вам меньше?
Надо. Современный процессор не опухнет и с 1000 вызовов планировщика.
Здравствуйте, biohumanoid, Вы писали:
B>Здравствуйте, netch80, Вы писали: A>>2.6 это не указание. Этой ветке много лет и там много совершенно разных версий. Указывайте точнее, если указываете. B>2.6.18, 2.6.26, 2.6.30 B>Все 2.6.x используют timer=250Hz (4ms).
Видимо, это особенность конкретной машины. У меня бывает и 100 и 2000 в зависимости от железа (я уж молчу про NOHZ вариант)
A>>Встречный вопрос: а зачем Вам меньше? B>Надо. Современный процессор не опухнет и с 1000 вызовов планировщика.
Он-то не опухнет, но если у Вас цель — просто заставить его работать ("сачкуешь, гад!"), то мне это непонятно. Точности порядка миллисекунды это уже soft realtime и нужно бывает редко.
Здравствуйте, netch80, Вы писали:
N>Он-то не опухнет, но если у Вас цель — просто заставить его работать ("сачкуешь, гад!"), то мне это непонятно. Точности порядка миллисекунды это уже soft realtime и нужно бывает редко.
Задача — шлюз между асинхронной сетью (ethernet) и CAN bus.
Редко, но бывает нужно.
По сути есть советы ? Sleep'у помогло, select'у нет...
timeBeginPeriod не помог, остальное еще не пробовал.
Здравствуйте, biohumanoid, Вы писали:
B>Здравствуйте, netch80, Вы писали:
N>>Он-то не опухнет, но если у Вас цель — просто заставить его работать ("сачкуешь, гад!"), то мне это непонятно. Точности порядка миллисекунды это уже soft realtime и нужно бывает редко.
B>Задача — шлюз между асинхронной сетью (ethernet) и CAN bus. B>Редко, но бывает нужно.
B>По сути есть советы ? Sleep'у помогло, select'у нет... B>timeBeginPeriod не помог, остальное еще не пробовал.
По сути — развести два треда, в одном select() и скармливание данных второму, второй уже использует высокоточные таймеры. И наоборот.
Здравствуйте, netch80, Вы писали:
B>>По сути есть советы ? Sleep'у помогло, select'у нет... B>>timeBeginPeriod не помог, остальное еще не пробовал.
N>По сути — развести два треда, в одном select() и скармливание данных второму, второй уже использует высокоточные таймеры. И наоборот.
Решено, timeBeginPeriod помог (не сразу заметил ftime даже с новым таймером хреново время отмеряет).
Копаю в сторону timeGetTime и GetSystemTimeAsFileTime (нужно абсолютное время, т.к. использую pthread_mutex_timedlock).
Отдельный поток — кака. Пусть потребитель заводит (я однопоточный, но thread-safe).