Instructions to sleep for a second almost never result in precisely one second’s sleep. Bob Schmidt walks us through the mechanics of why.
Suppose you are walking down the hallway of your office, and a Summer Intern (SI) intercepts you and asks, “If I put a line of code in my program that simply reads
sleep(10)
, how long will my program sleep? 1You look at the harried SI and reply, “It depends,” and you continue on your way.
The SI rushes to catch up with you, and asks, “It depends on what?”
And you answer, “That, too, depends,” as you continue walking.
At this point our young SI is frantic (and in immediate danger of going bald). “Stop talking in riddles, grey hair! I’m in real need of help here.”
Your stroll has taken you to the entrance of the break room, so you grab your interlocutor, duck inside, grab two cups of your favourite caffeinated beverage, and sit down.
“It depends,” you say, “on many things, so let’s start with first things first.”
First things first
To understand what’s going on ‘under the hood’ when a
sleep()
is executed, it helps to know a little about how CPUs work, and that means knowing something about CPU clocks, interrupts, and schedulers. The former two are hardware concepts; the latter is a software concept.
It's a decent peek under the hood for folks who usually treat such things as blackbox.
(Score: 1, Touché) by Anonymous Coward on Tuesday December 15 2015, @02:12AM
Because:
A. Nobody uses cron.
B. Cron runs in the kernel.
Which fallacious belief do you subscribe to?
(Score: 2) by ledow on Tuesday December 15 2015, @08:21AM
There's a big difference between a program scheduler (e.g. cron) and a task scheduler to choose which task is next to run on the processor.
(Score: -1, Troll) by Anonymous Coward on Tuesday December 15 2015, @09:06AM
If you would kindly read the pseudocode at the top of this thread, you would see that it describes a cron-type scheduler that schedules tasks at whole-minute intervals and sleeps for entire seconds at a time. Or don't. Be as illiterate as you want to be, asshole.