Multithreading

karl karl.ramberg at chello.se
Sat Mar 26 09:56:37 UTC 2005


Boris Gaertner wrote:

>"Daniel Salama" <dsalama at user.net> wrote:
>
>  
>
>>Hi,
>>
>>I'm experiencing a bit of a problem with a simple task I'm doing. I'm 
>>trying to read a file and print something in the Transcript window 
>>while reading the file. The problem I find is that while Squeak is 
>>reading the file, the VM dedicates 100% of its processor time to that 
>>task.
>>On the same VM, I'm running Seaside, so while the VM is reading 
>>the file, Seaside cannot render any pages. Any suggestions on how to 
>>overcome this problem?
>>    
>>
>
>Work with processes is advanced stuff - I really cannot explain
>that in 5 minutes. To give you a point to start, please try this:
>
>reader := 
>   [  | stream newLineChar line |
>    stream := FileStream readOnlyFileNamed: filename.
>    newLineChar := Character cr.
>    [stream atEnd]
>       whileFalse:
>        [line := stream upTo: newLineChar.
>         Transcript show: '.'.].
>     stream close.
>   ].
>
>  reader forkAt: Processor userBackgroundPriority.
> 
>Rules:
>
>1. To create a process, you have to encapsulate the
>code in a block.
>2. To start the process, you send that block one of the
>messages  fork  or forkAt:
>3. forkAt: allows you to assign a process priority, which
>normally desired. The instance protocol of class
>ProcessorScheduler contains methods to obtain process
>priorities (in message category 'priority names')
>Process is the sole instance of ProcessorScheduler
>in your image, so you can obtain process priorities
>from that object.
>4. Processor userBackgroundPriority is a good choice
>for file handling in the background.
>
>When you try this example, you should find that
>your interface is not locked, but you may notice
>reduced responsiveness.
>
>
>Some advices are very necessary:
>
>1. Archivate a copy of your image and its changes
>file before you begin to experiment with processes.
>2. Do not try to save your image when processes that
>you have created are still running.
>3. You can ignore advice no. 2, but at a price:
>It is often not possible to restart an image that was
>saved while user created processes were still running.
>
>
>  
>
And use the very nice ProcessBrowser to interact with the processes.

Karl




More information about the Squeak-dev mailing list