Skip to content
  • Koichi Sasada's avatar
    be1bbd5b
    M:N thread scheduler for Ractors · be1bbd5b
    Koichi Sasada authored
    This patch introduce M:N thread scheduler for Ractor system.
    
    In general, M:N thread scheduler employs N native threads (OS threads)
    to manage M user-level threads (Ruby threads in this case).
    On the Ruby interpreter, 1 native thread is provided for 1 Ractor
    and all Ruby threads are managed by the native thread.
    
    From Ruby 1.9, the interpreter uses 1:1 thread scheduler which means
    1 Ruby thread has 1 native thread. M:N scheduler change this strategy.
    
    Because of compatibility issue (and stableness issue of the implementation)
    main Ractor doesn't use M:N scheduler on default. On the other words,
    threads on the main Ractor will be managed with 1:1 thread scheduler.
    
    There are additional settings by environment variables:
    
    `RUBY_MN_THREADS=1` enables M:N thread scheduler on the main ractor.
    Note that non-main ractors use the M:N scheduler without this
    configuration. With this configuration, single ractor applications
    run threads on M:1 thread scheduler (green threads, user-level threads).
    
    `RUBY_MAX_CPU=n` specifies maximum number of native threads for
    M:N scheduler (default: 8).
    
    This patch will be reverted soon if non-easy issues are found.
    
    [Bug #19842]
    be1bbd5b
    M:N thread scheduler for Ractors
    Koichi Sasada authored
    This patch introduce M:N thread scheduler for Ractor system.
    
    In general, M:N thread scheduler employs N native threads (OS threads)
    to manage M user-level threads (Ruby threads in this case).
    On the Ruby interpreter, 1 native thread is provided for 1 Ractor
    and all Ruby threads are managed by the native thread.
    
    From Ruby 1.9, the interpreter uses 1:1 thread scheduler which means
    1 Ruby thread has 1 native thread. M:N scheduler change this strategy.
    
    Because of compatibility issue (and stableness issue of the implementation)
    main Ractor doesn't use M:N scheduler on default. On the other words,
    threads on the main Ractor will be managed with 1:1 thread scheduler.
    
    There are additional settings by environment variables:
    
    `RUBY_MN_THREADS=1` enables M:N thread scheduler on the main ractor.
    Note that non-main ractors use the M:N scheduler without this
    configuration. With this configuration, single ractor applications
    run threads on M:1 thread scheduler (green threads, user-level threads).
    
    `RUBY_MAX_CPU=n` specifies maximum number of native threads for
    M:N scheduler (default: 8).
    
    This patch will be reverted soon if non-easy issues are found.
    
    [Bug #19842]
Loading