× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Thanks for the info!

> -------- Original Message --------
> Subject: RE: Process Delay
> From: Scott Klement <rpg400-l@xxxxxxxxxxxxxxxx>
> Date: Mon, January 16, 2006 12:41 pm
> To: RPG programming on the AS400 / iSeries <rpg400-l@xxxxxxxxxxxx>
> 
> > Anyone know how the different techniques (DLYJOB, data queue wait,
> > sleep(), etc.) really work? I'm curious as to the efficiency of the
> > different techniques.
> 
> This is somewhat simplified, but:
> 
> Somewhere in the guts of the operating system (or maybe this part is in 
> hardware, not sure) there's a big loop that loops through all of the 
> active jobs. As each job comes up in the loop, it gives that job a certain 
> amount of time to execute code (a "timeslice") before moving on to the 
> next job.
> 
> Whenever you do a DLYJOB or sleep() or any other function that puts your 
> job into a "wait" state, the system simply doesn't give your program time 
> to execute until a given condition is satisfied.
> 
> If you say "delay for 5 seconds" the system won't give your job CPU time 
> until that 5 seconds is up.
> 
> If you say "delay until 30 seconds is up, or an entry appears on a data 
> queue" then the system checks that data queue for an entry, if there's one 
> there it lets your job continue. If not, it checks to see if the 30 
> seconds have passed.  If neither is true, it runs the next job on the 
> system.
> 
> The same is also true when waiting for data from a terminal.  It suspends 
> your job's execution until there's data (or an error) to be read from the 
> terminal.
> 
> That's why the "loop until %timestamp > target" technique doesn't perform 
> as well.  It doesn't tell the system to resume when a certain condition is 
> true.  Instead, it uses it's whole timeslice checking the current time, 
> then checking it again, then checking it again, etc, until the time is 
> late enough to continue.  Since the program needs to be in memory for this 
> to happen, this might mean moving data into memory for each timeslice. 
> Since it doesn't stop and wait, it gets CPU time every time through the 
> system's loop, which means that every other job has to wait for it, it 
> can't just be skipped.  So, while this type of technique would pose no 
> problems if you had a dedicated CPU (such as a PC running MS-DOS) whenever 
> you need to share a CPU or memory or other resources between multiple 
> running processes, the "loop until" technique is a bad idea.
> 
> DLYJOB and sleep() likely call the same underlying MI instruction.  The 
> only difference between then is DLYJOB has a command that has to be 
> parsed, so sleep will be marginally faster (the difference would be almost 
> immeasurable)
> 
> Waiting on a data queue or message queue would be slightly less efficient 
> since the system has to check the queue as well as the clock each time. 
> But again, I doubt you'd ever notice the difference.
> 
> There's one option that I haven't seen discussed...  setitimer().  You 
> could use that with a signal handler to have a subprocedure that's run at 
> a given interval. This might be an interesting option if you need to run 
> things on a given interval, such as 2 minutes.
> 
> Using sleep() won't do that.  If you sleep for 120 seconds, then run a 
> porgram, then sleep for 120 seconds, does the program run every 2 minutes? 
> No, because the program takes time to execute.  For example, if the 
> program takes 30 seconds to run, then it's being run every 2:30.  Two 
> minutes for the sleep, and 30 seconds for the program itself to run.
> 
> If you used setitimer() it would actually run every 2 minutes instead of 
> 2:30 because the signal handler gets called every 2 minutes without regard 
> to what it does in between.  (Unless, of course, it's runtime actually 
> exceeds the interval time...  for example, if you called a program that 
> took longer than 2 minutes...)
> 
> Anyway... hope you get the idea.
> -- 
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
> To post a message email: RPG400-L@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.


As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.