Такой вопрос: из программы на Си вызываю в цикле некую утилиту с помощью
функции popen(). Всё работает, но примерно с полусекундными задержками. Пробую
сделать то же самое в командной строке ksh в цикле типа "for i in 1 2 3 4 5 6 7
8 9 10; do утилита; done", и задержки между выводами сокращаются примерно в 2
раза (а то и больше). В принципе, это не критично (вызывать утилиту мне надо
раз в несколько секунд), однако неприятно, ведь если у меня задержки больше,
чем в shell, значит я медленне гружу эту утилиту, увеличивается нагрузка на
процессор и пр. Приоритеты в данном случае ни при чём: запускал свою прогу с
более высоким приоритетом, результат тот же. Hикто не знает, в чём я неправ и
как это реализовать, чтобы работало по крайней мере не медленнее, чем в shell?
Удачи. AuR/eliano.
... Придурков нам не надо. (Светлана Динабург)
Пятница 18 Мая 2007 20:14, я писал All:
Ae> Такой вопрос: из программы на Си вызываю в цикле некую утилиту с
Ae> помощью функции popen(). Всё работает, но примерно с полусекундными
Ae> задержками. Пробую сделать то же самое в командной строке ksh в цикле
Ae> типа "for i in 1 2 3 4 5 6 7 8 9 10; do утилита; done", и задержки
Ae> между выводами сокращаются примерно в 2 раза (а то и больше).
Вопрос снят (и извиняюсь за то, что как следует не подумал, прежде чем
спрашивать). У меня в программе организуется pipe канал, а в приведённой
командной строке никакого канала нет. А вот если изменить строку так:
for i in 1 2 3 4 5 6 7 8 9 10; do утилита | cat ; done
или так:
(for i in 1 2 3 4 5 6 7 8 9 10; do утилита; done) | cat
то временные характеристики будут примерно такие же. Хотя никогда бы не
подумал, что неименованные каналы жрут столько времени.
Удачи. AuR/eliano.
... Категорически воспрещается считать мой отзыв чистосердечным.(Тётя Чарли)