Thread scheduling


#1

I’ve search for documentation about whether Ruby thread scheduling
uses FIFO or round-robin and can’t find anything. It seems to be
round-robin. Is that correct?

Is there a way to control the time slice used for each thread running
at the same priority?


#2

Mark V. wrote:

I’ve search for documentation about whether Ruby thread scheduling
uses FIFO or round-robin and can’t find anything. It seems to be
round-robin. Is that correct?

Is there a way to control the time slice used for each thread running
at the same priority?

No direct means AFAIK. You can always use Thread#pass but I recommend
to
not to. Also, there are no thread priorities AFAIK.

robert

#3

On 1/11/06, Robert K. removed_email_address@domain.invalid wrote:

Mark V. wrote:

I’ve search for documentation about whether Ruby thread scheduling
uses FIFO or round-robin and can’t find anything. It seems to be
round-robin. Is that correct?

Is there a way to control the time slice used for each thread running
at the same priority?

No direct means AFAIK. You can always use Thread#pass but I recommend to
not to. Also, there are no thread priorities AFAIK.

The Thread class has priority and priority= instance methods. I
created two threads and noticed that they were time slicing. Then I
set the priority of one to be higher than the other and it got all the
time until it completed. So thread priorities seem to be supported.


#4

Mark V. wrote:

I’ve search for documentation about whether Ruby thread scheduling
uses FIFO or round-robin and can’t find anything. It seems to be
round-robin. Is that correct?

all threads being equal, it’s round robin.

the thread scheduler is called rb_thread_schedule in the eval.c file.

Is there a way to control the time slice used for each thread running
at the same priority?

you would have to change the hard-coded time (integer) values
in the eval.c file and recompile ruby.


#5

On 1/11/06, Lou V. removed_email_address@domain.invalid wrote:

Is there a way to control the time slice used for each thread running
at the same priority?

you would have to change the hard-coded time (integer) values
in the eval.c file and recompile ruby.

Thanks for the info! That’s some tough code to read. I thought I
could at least find the time slice duration, but I failed. Do you know
which variable/constant holds that? Is it WAIT_TIME? That has a
value of (1<<2) which I guess is equal to 4. 4 what? milliseconds?
microseconds?


#6

times are set in either function:

thread_timer, or
rb_thread_start_timer,

depending on whether _THREAD_SAFE is set (on my platform it is).

On my platform, time slice is set to 10 milliseconds:

req.tv_nsec = 10000000;

WAIT_TIME is just a flag. It is not the amount of time to wait.