summaryrefslogtreecommitdiff
path: root/ruby.c
diff options
context:
space:
mode:
authorKoichi Sasada <[email protected]>2023-04-10 10:53:13 +0900
committerKoichi Sasada <[email protected]>2023-10-12 14:47:01 +0900
commitbe1bbd5b7d40ad863ab35097765d3754726bbd54 (patch)
tree2995a0859bea1d6b2903dcd324f41869dbef14a1 /ruby.c
parent096ee0648e215915a3019c2cd68ba220d94eca12 (diff)
M:N thread scheduler for Ractors
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]
Diffstat (limited to 'ruby.c')
-rw-r--r--ruby.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/ruby.c b/ruby.c
index 9d9ba316cb..89a546920f 100644
--- a/ruby.c
+++ b/ruby.c
@@ -53,6 +53,7 @@
#include "internal/loadpath.h"
#include "internal/missing.h"
#include "internal/object.h"
+#include "internal/thread.h"
#include "internal/ruby_parser.h"
#include "internal/variable.h"
#include "ruby/encoding.h"
@@ -2148,6 +2149,7 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt)
#endif
ruby_gc_set_params();
+ ruby_mn_threads_params();
ruby_init_loadpath();
Init_enc();