LINUX.ORG.RU

Линукс выполняет бесконечные циклы слишком быстро

 , , ,


0

2

Генерирую простенькую страничку.
В начале генерации: starttime = os.clock(). В конце: print(string.format("elapsed time: %.6fs", os.clock() - starttime)).
Получаю значение 0.000124s (каждый раз время немного отличается).
Добавляю в середину программы строчку os.execute("sleep 1");. Смотрю, как изменился счётчик: 0.000968s (опять каждый раз значение немного отличается).
Это неправильный счётчик или неправильный sleep?

★★★★★

os.execute

Можно ведь замерить длительность выполнения этого «sleep 1» вне lua. И сразу станет понятно.

amomymous ★★★
()

А чего ты ожидал - os.clock показывает какое время твоя программа реально кушала CPU, а не ожидала в системном вызове.

Vovka-Korovka ★★★★★
()
Ответ на: комментарий от amomymous
$ time sleep 1

real	0m1.001s
user	0m0.000s
sys	0m0.000s

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от Vovka-Korovka

os.clock показывает какое время твоя программа реально кушала CPU

Это всё объясняет. Спасибо.
А есть какой-нибудь способ замерить, сколько времени действительно проходит?

CYB3R ★★★★★
() автор топика

Это неправильный счётчик или неправильный sleep?

Это планировщик

Dron ★★★★★
()

os.execute(«sleep 1»);

Но зачем?

каждый раз время немного отличается)

В чем проблема, я никак не пойму? Линукс не RTOS, чтобы тебе какие-то жесткие временные рамки гарантировать.

cherry-pick
()
Ответ на: комментарий от cherry-pick

Я думал, что во втором случае время будет на секунду больше.

CYB3R ★★★★★
() автор топика

Линукс выполняет бесконечные циклы слишком быстро

Вспомнилась старая шутка про Линуса

sudopacman ★★★★★
()
Ответ на: комментарий от CYB3R

А есть какой-нибудь способ замерить, сколько времени действительно проходит?

Написать свое расширение, енжой ё луа.

anonymous
()

если частота ядра минимальная 900 MHz ,разве может что-то из подобного кода замедлить работу ядра?

anonymous
()

sleep — не бесконечный цикл, школота

anonymous
()
Ответ на: комментарий от CYB3R

Не поможет, там только секунды.

Lua, к сожалению, написана строго на стандартном C (причём так, чтобы одновременно быть корректным кодом на C++), а в стандартной библиотеке C нет функции, возвращающей текущее время в миллисекундах.

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

а в стандартной библиотеке C нет функции, возвращающей текущее время в миллисекундах.

gettimeofday();

учите матчаcть :-)

MKuznetsov ★★★★★
()
Ответ на: комментарий от JANB

Линус Торвальдс случайно поместил бесконечный цикл в ядро Linux, однако ничего страшного не случилось, потому что компьютер Линуса исполнил цикл за 2 секунды

sudopacman ★★★★★
()
Ответ на: комментарий от MKuznetsov

в стандартной библиотеке C

gettimeofday

ты не поверишь

anonymous
()
Ответ на: комментарий от anonymous

Какое отношение стандарт языка имеет к функциям ОС?

Ну ведь в стандарте C же есть time(), которая возвращает время (только в секундах).

proud_anon ★★★★★
()
Ответ на: комментарий от anonymous

Ага, но нет, например, readdir() ни в каком виде. Не судьба получить на C список файлов.

Ну вот и в Lua поэтому тоже такой функции нет.

proud_anon ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.