hi all,
Im interested to know how perl6/parrot implements threads. Im mainly
interested as im writing a small vm of my own. Not a production vm like
parrot, more for interest/curiosity etc. From the outset i decided i
wanted the vm to provide its own threading mechanism i.e. not based on
posix threads for example. My first plan was to have 2 native threads,
one for execution of the main 'core' execution code the runtime if you
like, the other thread was used to tell the execution code to swap
threads. I thought i could synchronise these 2 using native
semaphores. When it comes down to it a single op code takes a number of
nastive instructions i.e. to execute an add insttuction i may have to do
(say) 5 things. so I just check after each op code has been executed
to see if the thread needs swapping out. That seems like a bad idea
mainly due to speed/efficiency. Each thread is a top level object, so
the stack, all stack pointers and register data etc resides in the
thread, but i still cant have the execution engine swapping threads mid
operation, so in my add example i still dont think i would want the
execution engine swapping out a thread after 3 instructions, it would
need to complete all 5.
Its been a bit of a brick wall this, it seemed to be going quite well
up to this point and i need to solve this before i can move on with
lwm,(light weight machine).
Any pointers, thoughts or comments are welcome.
Cheers
Dave