Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 [Tutorial] Processes -- Introduction and setpriority
Index -> Programming, Turing -> Turing Tutorials
View previous topic Printable versionDownload TopicRate TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
Tony




PostPosted: Thu Mar 03, 2005 1:38 pm   Post subject: [Tutorial] Processes -- Introduction and setpriority

Processes Revised
HoltSoft wrote:

A process declaration is much like a procedure declaration, but is activated by a fork statement rather than by a call. The fork statement starts concurrent (parallel) execution of the process while the statements following the fork continue to execute.

Such allows us to execute multiple lines of code in parallel rather then sequentially one after one. An important thing to realize is that commands take turns to execute, and two processes will not run nicely next to each other. Note that it is individual commands that take turns, not the entire line statement as one might assume at first.

Turing:

process foo
    loop
        put "foo", "foo", "foo"
    end loop
end foo
process bar
    loop
        put "bar", "bar", "bar"
    end loop
end bar

fork foo
fork bar

What kind of output would you expect?

Posted Image, might have been reduced in size. Click Image to view fullscreen.

Not quite what we wanted, is it?
Reducing the number of commands per line decreases the chance of corruption, but a) that tells us to stop using chain functions, and b) glitches will still occur.
Turing:

put "foo"

Is two statement. First outputs string "foo", second outputs the newline character. Try it out.
Turing:

process foo
    loop
        put "foo"
    end loop
end foo
process bar
    loop
        put "bar"
    end loop
end bar

fork foo
fork bar


Posted Image, might have been reduced in size. Click Image to view fullscreen.

delay (1) after each put fixes the late \n glitch, but a) it slows down the execution time as delays accumulate, and b) this simply stops working as we go back to our put "foo", "foo", "foo" example. Glitches reemerge even at delay(100) as processes simply have a lot of picks to make. Delay becomes just another command in the mix.

Although processes come across looking quite badly at this point, it is only because they are unmanaged.

setpriority ( p : nat )
HoltSoft wrote:

The setpriority procedure is used to set the priority of a process in a concurrent program. This priority cannot be counted on to guarantee critical access to shared variables. A smaller value of p means increased speed. The argument to setpriority may be limited to the range 0 to 2**15 - 1.

That is not an entirely accurate description. Smaller value is not an increase in speed, it is an order the process takes in the query.

By default everything is set to a priority of 1000. You can find out the priority of any given function using getpriority (returning function's nat priority value). When processes start piling up in a query, by default one to chosen at random. You would need to tell the processes the order you want them to take. setpriority could (and should) be used as triggers for executing processes. When a block of code needs to be executed together (such as our "foo", "foo", "foo" output without breaking up), it should be wrapped around in a priority shift.

Turing:

process foo
    loop
        setpriority (999) %increase priority
        put "foo", "foo", "foo"
        setpriority (1000) %return to normal
    end loop
end foo
process bar
    loop
        put "bar"
    end loop
end bar

fork bar
fork foo

Since put "foo", "foo", "foo" was given a higher priority (smaller number == higher priority) than put "bar"'s default 1000, the former was executed in full before it's priority was set back to 1000 (equivalent to that of bar) and other processes were given a chance to execute. Such technique is similar to Visual Basic's DoEvents functionality.

Posted Image, might have been reduced in size. Click Image to view fullscreen.



fork_1.jpg
 Description:
 Filesize:  21.96 KB
 Viewed:  4367 Time(s)

fork_1.jpg



fork_2.jpg
 Description:
 Filesize:  9.99 KB
 Viewed:  4361 Time(s)

fork_2.jpg



fork_3.jpg
 Description:
 Filesize:  15.51 KB
 Viewed:  4360 Time(s)

fork_3.jpg


Sponsor
Sponsor
Sponsor
sponsor
jamonathin




PostPosted: Thu Mar 03, 2005 2:37 pm   Post subject: (No subject)

ver noice, very noice Claping
Cervantes




PostPosted: Thu Mar 03, 2005 5:55 pm   Post subject: (No subject)

Uh oh, I'm not getting the nice output.
Thinking
I am still getting things like barfoofoofoo and black lines.



process still messed.jpg
 Description:
 Filesize:  14.78 KB
 Viewed:  4370 Time(s)

process still messed.jpg


Martin




PostPosted: Fri Mar 04, 2005 8:49 am   Post subject: (No subject)

So it's uhh...just as random with different odds?

Processes still suck.
Display posts from previous:   
   Index -> Programming, Turing -> Turing Tutorials
View previous topic Tell A FriendPrintable versionDownload TopicRate TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 1  [ 4 Posts ]
Jump to:   


Style:  
Search: