Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:3
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:7
Форум » starterkit.ru » Embedded Linux
Вопрос по потокам в Linux
kos
Добавлено 13.04.2014 14:45
0
Сообщение: 1
kos
0

Пункты: 2049
Регистрация: 04.04.2014
Вопрос весьма прост я принимаю поток с COM порта стандартной функцией read. Она сейчас запущенна в блокирующем НЕ каноническом режиме. В отдельном потоке.
Вопрос собственно в том - как выгоднее с точки зрения производительности оставить как есть или например сконфигурировать ее в неблокирующий режим и время от времени опрашивать отправляя поток в спячку на какое-то время.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 13.04.2014 16:52 Редактировалось 13.04.2014 17:22 Сообщение: 2
sasamy
4.71

Пункты: 83562
Регистрация: 14.08.2009
Есть специальный механизм - poll/select чтобы не делать опрос "вручную", но если у вас только один порт и только чтение то по-моему разницы между блокирующим чтением и неблокирующим+poll/select никакой нет. poll/select полезен когда надо контролировать несколько устройств не занимая процесс только одним . Вообще poll/select предпочтительнее - лучше масштабируется (проще расширить функциональность), не напрягает планировщик но если не планируете ничего больше добавлять и все работает то смысла переписывать нет, а вручную по таймеру опрашивать как вы написали - это будет еще хуже чем есть сейчас.
Спуститься к концу Подняться к началу
Персональная информация
kos
Добавлено 13.04.2014 18:15 Сообщение: 3
kos
0

Пункты: 2049
Регистрация: 04.04.2014
Имелось ввиду не по таймеру а функцией usleep()
Или это вы и имели ввиду?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 13.04.2014 18:44 Редактировалось 13.04.2014 19:25 Сообщение: 4
sasamy
4.71

Пункты: 83562
Регистрация: 14.08.2009
Дык какая разница - это тот же таймер - поток "засывает" а не в активном ожидании и планироовщик его "будит" по окончании таймера. Если решили переписать - переписывайте на poll/select, но я бы не трогал если работает. Принципиальная разница poll в том что поток будет "разбужен" когда реально появились данные - вы не вмешиваетесь в работу планировщика постоянным дерганием через таймер, наличие данных в ядре проверяется не нарушая планирование.
Спуститься к концу Подняться к началу
Персональная информация
kos
Добавлено 14.04.2014 14:33 Сообщение: 5
kos
0

Пункты: 2049
Регистрация: 04.04.2014
Цитата
Дык какая разница - это тот же таймер - поток "засывает" а не в активном ожидании и планироовщик его "будит" по окончании таймера. Если решили переписать - переписывайте на poll/select, но я бы не трогал если работает. Принципиальная разница poll в том что поток будет "разбужен" когда реально появились данные - вы не вмешиваетесь в работу планировщика постоянным дерганием через таймер, наличие данных в ядре проверяется не нарушая планирование.


Спасибо весьма ценное замечание!
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux