আমি সবুজ থ্রেড ব্যবহার করে রুবির "সমবায়" থ্রেডিং সম্পর্কে জানি । প্রসেসিংয়ের জন্য একাধিক সিপিইউ কোর ব্যবহার করার জন্য আমি কীভাবে আমার অ্যাপ্লিকেশনটিতে সত্যিকারের "ওএস-স্তরের" থ্রেড তৈরি করতে পারি?
আমি সবুজ থ্রেড ব্যবহার করে রুবির "সমবায়" থ্রেডিং সম্পর্কে জানি । প্রসেসিংয়ের জন্য একাধিক সিপিইউ কোর ব্যবহার করার জন্য আমি কীভাবে আমার অ্যাপ্লিকেশনটিতে সত্যিকারের "ওএস-স্তরের" থ্রেড তৈরি করতে পারি?
উত্তর:
জার্গের সেপ্টেম্বর ২০১১ মন্তব্যে আপডেট হয়েছে
আপনি এখানে দুটি খুব আলাদা জিনিসকে বিভ্রান্ত বলে মনে করছেন : রুবি প্রোগ্রামিং ভাষা এবং রুবি প্রোগ্রামিং ভাষার একটি নির্দিষ্ট প্রয়োগের নির্দিষ্ট থ্রেডিং মডেল। রুবি প্রোগ্রামিং ল্যাঙ্গুয়েজের প্রায় 11 টি বিভিন্ন বাস্তবায়ন রয়েছে, খুব আলাদা এবং অনন্য থ্রেডিং মডেলগুলির সাথে।
(দুর্ভাগ্যক্রমে, 11 টি বাস্তবায়নের মধ্যে দু'জনই প্রকৃতপক্ষে উত্পাদন ব্যবহারের জন্য প্রস্তুত, তবে বছরের শেষের দিকে সেই সংখ্যা সম্ভবত চার বা পাঁচের উপরে চলে যাবে)) ( আপডেট : এটি এখন 5: এমআরআই, জেআরবি, ইআরভি) (দোভাষী রুবি ১.৯), রুবিনিয়াস এবং আয়রন রুবি) এর জন্য।
প্রথম বাস্তবায়নের আসলে কোনও নাম নেই যা এটি উল্লেখ করতে একে একে বিশ্রী করে তোলে এবং সত্যই বিরক্তিকর এবং বিভ্রান্তিকর। এটি প্রায়শই "রুবি" হিসাবে পরিচিত, যা নাম না থাকার চেয়ে আরও বিরক্তিকর এবং বিভ্রান্তিকর কারণ এটি রুবি প্রোগ্রামিং ভাষার বৈশিষ্ট্য এবং একটি নির্দিষ্ট রুবি বাস্তবায়নের মধ্যে অন্তহীন বিভ্রান্তির দিকে নিয়ে যায়।
এটিকে কখনও কখনও "এমআরআই" ("ম্যাটজের রুবি বাস্তবায়ন" এর জন্য), ক্রুবি বা ম্যাটজরবিও বলা হয়।
এমআরআই তার দোভাষী এর মধ্যে সবুজ থ্রেড হিসাবে রুবি থ্রেডস প্রয়োগ করে । দুর্ভাগ্যক্রমে, এটি সেই থ্রেডগুলিকে সমান্তরালে নির্ধারিত হতে দেয় না, তারা একবারে কেবল একটি থ্রেড চালাতে পারে।
তবে যে কোনও সংখ্যক সি থ্রেডস (পসিক্স থ্রেডস ইত্যাদি) রুবি থ্রেডের সমান্তরালে চলতে পারে, তাই বাহ্যিক সি লাইব্রেরি বা এমআরআই সি এক্সটেনশানগুলি যা তাদের নিজস্ব থ্রেড তৈরি করে তা এখনও সমান্তরালে চলতে পারে।
দ্বিতীয় বাস্তবায়নটি হ'ল YARV ("তবুও আরেকটি রুবি ভিএম" এর জন্য সংক্ষিপ্ত)। YARV রুবি থ্রেডকে পসিক্স বা উইন্ডোজ এনটি থ্রেডস হিসাবে প্রয়োগ করে , তবে এটি কেবলমাত্র একটি রুবি থ্রেডটি যে কোনও সময়ে নির্ধারিত হতে পারে তা নিশ্চিত করার জন্য এটি একটি গ্লোবাল ইন্টারপ্রেটার লক (জিআইএল) ব্যবহার করে।
এমআরআই এর মতো, সি টপিক করতে আসলে রুবি থ্রেড সমান্তরাল চালানো।
ভবিষ্যতে, এটি সম্ভব, জিআইএল আরও সূক্ষ্ম দানযুক্ত তালাগুলিতে বিভক্ত হয়ে পড়তে পারে , ফলে আরও বেশি সংখ্যক কোড আসলে সমান্তরালভাবে চালিত হতে পারে, তবে এটি এখনও অনেক দূরের, এটি এখনও পরিকল্পনা করা হয়নি।
জেআরবি রুবি থ্রেডকে নেটিভ থ্রেডস হিসাবে প্রয়োগ করে , যেখানে জেভিএমের ক্ষেত্রে "নেটিভ থ্রেডস" স্পষ্টতই বোঝায় "জেভিএম থ্রেডস"। জে আরবি তাদের উপর কোনও অতিরিক্ত লক চাপিয়ে দেয় না। সুতরাং, সেই থ্রেডগুলি আসলে সমান্তরালভাবে চলতে পারে কিনা তা জেভিএমের উপর নির্ভর করে: কিছু জেভিএম জেভিএম থ্রেডগুলি ওএস থ্রেড হিসাবে এবং কিছু গ্রিন থ্রেড হিসাবে প্রয়োগ করে। (সান / ওরাকল থেকে মূলধারার জেভিএমগুলি জেডিকে ১.৩ থেকে একমাত্র ওএস থ্রেড ব্যবহার করে)
XRuby এছাড়াও জেভিএম টপিক হিসাবে রুবি টপিক প্রয়োগ । আপডেট : এক্সরুবি মারা গেছে।
আয়রনরবি রুবি থ্রেডকে নেটিভ থ্রেডস হিসাবে প্রয়োগ করে , যেখানে সিএলআর ক্ষেত্রে "নেটিভ থ্রেডস" স্পষ্টতই বোঝায় "সিএলআর থ্রেডস"। আয়রণরবি তাদের উপর কোনও অতিরিক্ত লকিং চাপায় না, সুতরাং, আপনার সিএলআর যতক্ষণ না এটি সমর্থন করে ততক্ষণ তাদের সমান্তরালভাবে চালানো উচিত।
Ruby.NET এছাড়াও CLR টপিক হিসাবে রুবি টপিক প্রয়োগ । আপডেট: রুবি.এনইটি মারা গেছে।
রুবিনিয়াস তার ভার্চুয়াল মেশিনের মধ্যে সবুজ থ্রেড হিসাবে রুবি থ্রেডগুলি প্রয়োগ করে । আরও সুনির্দিষ্টভাবে: রুবিনিয়াস ভিএম খুব হালকা, খুব নমনীয় সম্মতি / সমান্তরালতা / অ-স্থানীয় নিয়ন্ত্রণ-প্রবাহের নির্মাণকে রফতানি করে, " টাস্ক " এবং অন্যান্য সমস্ত (এই আলোচনার সূত্রগুলি , তবে ধারাবাহিকতা , অভিনেতা এবং অন্যান্য সামগ্রী ) টাস্ক ব্যবহার করে খাঁটি রুবিতে প্রয়োগ করা হয়।
রুবিনিয়াস (বর্তমানে) থ্রেডগুলি সমান্তরালভাবে শিডিউল করতে পারবেন না, তবে এটি কোনও সমস্যা খুব বেশি নয়: রুবিনিয়াস একটি রুবিনিয়াস প্রসেসের মধ্যে সমান্তরালে বেশ কয়েকটি পসিক্স থ্রেডে ইতিমধ্যে বেশ কয়েকটি ভিএম ইনস্ট্যান্স চালাতে পারেন । যেহেতু থ্রেডগুলি প্রকৃতপক্ষে রুবিতে প্রয়োগ করা হয়েছে, সেহেতু, তারা অন্য যে কোনও রুবি অবজেক্টের মতোই সিরিয়ালযুক্ত হতে পারে এবং একটি আলাদা পসিক্স থ্রেডে একটি ভিন্ন ভিএম-তে প্রেরণ করতে পারে। (এটি বিম একই মডেল এরলং ভিএম এসএমপি সমঝোতার জন্য ব্যবহার করে Rub এটি ইতিমধ্যে রুবিনিয়াস অভিনেতাদের জন্য প্রয়োগ করা হয়েছে ))
হালনাগাদ : এই উত্তরের রুবিনিয়াস সম্পর্কিত তথ্য শটগান ভিএম সম্পর্কিত, যা আর নেই। "নতুন" সি ++ ভিএম একাধিক ভিএম (যেমন এরলং / বিএএম স্টাইল) জুড়ে নির্ধারিত সবুজ থ্রেড ব্যবহার করে না, এটি সিএলআর, মনো দ্বারা নিযুক্ত করা একের মতো একাধিক নেটিভ ওএস থ্রেড মডেল সহ আরও প্রচলিত একক ভিএম ব্যবহার করে uses , এবং প্রায় প্রতিটি জেভিএম।
MacRuby উদ্দেশ্য সি রানটাইম এবং CoreFoundation এবং কোকো ফ্রেমওয়ার্ক উপরে YARV একটি পোর্ট হিসেবে শুরু আউট। এটি এখন YARV থেকে উল্লেখযোগ্যভাবে সরিয়ে নিয়েছে, কিন্তু আফাইক এটি এখনও YARV এর সাথে একই থ্রেডিং মডেলটি ভাগ করে । হালনাগাদ: ম্যাকরবি আপেল আবর্জনা সংগ্রাহকের উপর নির্ভর করে যা অবহেলিত হিসাবে ঘোষিত হয় এবং ম্যাকোএসএক্সের পরবর্তী সংস্করণগুলিতে সরানো হবে, ম্যাকরুবি অপরিশোধিত।
কার্ডিনাল তোতা ভার্চুয়াল মেশিনের জন্য রুবি বাস্তবায়ন । এটি থ্রেডগুলি এখনও কার্যকর করে না, তবে এটি যখন হয় তখন এটি সম্ভবত তাদের তোতা থ্রেড হিসাবে প্রয়োগ করে ।আপডেট : কার্ডিনাল খুব নিস্ক্রিয় / মৃত বলে মনে হচ্ছে।
ম্যাগলাইভ হ'ল জেমস্টোন / এস স্মার্টটাক ভিএম এর রুবি বাস্তবায়ন । জেমস্টোন / এস কী থ্রেডিং মডেল ব্যবহার করে, থ্রেডিং মডেল ম্যাগলেভ কী ব্যবহার করে বা থ্রেডগুলি এমনকি এখনও প্রয়োগ করা হলেও (সম্ভবত না) আমার কোনও তথ্য নেই।
HotRuby হয় না তার নিজস্ব একটি সম্পূর্ণ রুবি বাস্তবায়ন। এটি জাভাস্ক্রিপ্টে একটি YARV বাইটকোড ভিএম এর বাস্তবায়ন। হটরুবি থ্রেডগুলি সমর্থন করে না (এখনও?) এবং যখন এটি হয়, তারা সমান্তরালে চলতে সক্ষম হবে না, কারণ জাভাস্ক্রিপ্টের সত্যিকারের সমান্তরালতার জন্য কোনও সমর্থন নেই। হটরুবির একটি অ্যাকশনস্ক্রিপ্ট সংস্করণ রয়েছে, তবে অ্যাকশনস্ক্রিপ্ট আসলে সমান্তরালতা সমর্থন করে support আপডেট : হটরুবি মারা গেছে।
দুর্ভাগ্যক্রমে, এই 11 টি রুবি বাস্তবায়নের মধ্যে দুটি মাত্র প্রকৃতপক্ষে উত্পাদন-প্রস্তুত: এমআরআই এবং জেউবি।
সুতরাং, আপনি যদি সত্যিকারের সমান্তরাল থ্রেড চান তবে জে রবি বর্তমানে আপনার একমাত্র পছন্দ - এটি কোনও খারাপ নয়: জেআরবি আসলে এমআরআই এর চেয়ে দ্রুত এবং তাত্পর্যপূর্ণভাবে আরও স্থিতিশীল।
অন্যথায়, "শাস্ত্রীয়" রুবি সমাধানটি সমান্তরালতার জন্য থ্রেডের পরিবর্তে প্রক্রিয়াগুলি ব্যবহার করা হয়। রুবি কোর লাইব্রেরিতে
পদ্ধতির সাথে Process
মডিউলটি রয়েছে যা এটি অন্য রুবি প্রক্রিয়াটিকে কাঁটাচামচ করা সহজ করে দেয়। এছাড়াও, রুবি স্ট্যান্ডার্ড লাইব্রেরিতে
বিতরণ রুবি (ডিআরবি / ডিআরবি) লাইব্রেরি রয়েছে, যা রুবি কোডটি কেবল একই মেশিনে নয়, পুরো নেটওয়ার্ক জুড়ে একাধিক প্রক্রিয়াতেও তুচ্ছভাবে বিতরণ করতে দেয়।Process.fork
রুবি ১.৮ এর কেবল সবুজ থ্রেড রয়েছে, আসল "ওএস-স্তর" থ্রেড তৈরির উপায় নেই। তবে, রুবি ১.৯-এ ফাইবার নামে একটি নতুন বৈশিষ্ট্য থাকবে যা আপনাকে আসল ওএস-স্তরের থ্রেড তৈরি করতে দেয়। দুর্ভাগ্যক্রমে, রুবি ১.৯ এখনও বিটাতে রয়েছে, কয়েক মাসের মধ্যে এটি স্থিতিশীল হওয়ার কথা।
আর একটি বিকল্প জেআরবি ব্যবহার করা। জেআরবি থ্রেডগুলি ওএস-স্তরের থিয়েড হিসাবে প্রয়োগ করে, এতে কোনও "সবুজ থ্রেড" নেই। JRuby এর সর্বশেষ সংস্করণটি 1.1.4 এবং রুবি 1.8 এর সমান
এটি বাস্তবায়নের উপর নির্ভর করে:
রুবির , এবং হিসাবে ক্লোজার রয়েছে । জেআরবিতে ক্লোজার এবং একাধিক কোরগুলির পুরো সুবিধা নিতে জাভার এক্সিকিউটররা কাজে আসবে; ম্যাকরুবির জন্য আমি জিসিডির সারি পছন্দ করি ।
মনে রাখবেন, আসল "ওএস-স্তর" থ্রেড তৈরি করতে সক্ষম হচ্ছেনBlocks
lambdas
Procs
বোঝায় না যে আপনি সমান্তরাল প্রক্রিয়াকরণের জন্য একাধিক সিপিইউ কোর ব্যবহার করতে পারেন। নীচের উদাহরণগুলি দেখুন।
এটি একটি সাধারণ রুবি প্রোগ্রামের আউটপুট যা রুবি ২.১.০ ব্যবহার করে 3 টি থ্রেড ব্যবহার করে:
(jalcazar@mac ~)$ ps -M 69877
USER PID TT %CPU STAT PRI STIME UTIME COMMAND
jalcazar 69877 s002 0.0 S 31T 0:00.01 0:00.04 /Users/jalcazar/.rvm/rubies/ruby-2.1.0/bin/ruby threads.rb
69877 0.0 S 31T 0:00.01 0:00.00
69877 33.4 S 31T 0:00.01 0:08.73
69877 43.1 S 31T 0:00.01 0:08.73
69877 22.8 R 31T 0:00.01 0:08.65
আপনি এখানে দেখতে পাচ্ছেন, সেখানে চারটি ওএস থ্রেড রয়েছে, তবে রাষ্ট্রের সাথে কেবল R
এটিই চলছে। এটি রুবির থ্রেডগুলি কীভাবে প্রয়োগ করা হয় তার একটি সীমাবদ্ধতার কারণে।
একই প্রোগ্রাম, এখন জেআরবি সাথে। আপনি রাষ্ট্রের সাথে তিনটি থ্রেড দেখতে পাচ্ছেন R
, যার অর্থ তারা সমান্তরালে চলছে।
(jalcazar@mac ~)$ ps -M 72286
USER PID TT %CPU STAT PRI STIME UTIME COMMAND
jalcazar 72286 s002 0.0 S 31T 0:00.01 0:00.01 /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/bin/java -Djdk.home= -Djruby.home=/Users/jalcazar/.rvm/rubies/jruby-1.7.10 -Djruby.script=jruby -Djruby.shell=/bin/sh -Djffi.boot.library.path=/Users/jalcazar/.rvm/rubies/jruby-1.7.10/lib/jni:/Users/jalcazar/.rvm/rubies/jruby-1.7.10/lib/jni/Darwin -Xss2048k -Dsun.java.command=org.jruby.Main -cp -Xbootclasspath/a:/Users/jalcazar/.rvm/rubies/jruby-1.7.10/lib/jruby.jar -Xmx1924M -XX:PermSize=992m -Dfile.encoding=UTF-8 org/jruby/Main threads.rb
72286 0.0 S 31T 0:00.00 0:00.00
72286 0.0 S 33T 0:00.00 0:00.00
72286 0.0 S 31T 0:00.09 0:02.34
72286 7.9 S 31T 0:00.15 0:04.63
72286 0.0 S 31T 0:00.00 0:00.00
72286 0.0 S 31T 0:00.00 0:00.00
72286 0.0 S 31T 0:00.00 0:00.00
72286 0.0 S 31T 0:00.04 0:01.68
72286 0.0 S 31T 0:00.03 0:01.54
72286 0.0 S 31T 0:00.00 0:00.00
72286 0.0 S 31T 0:00.01 0:00.01
72286 0.0 S 31T 0:00.00 0:00.01
72286 0.0 S 31T 0:00.00 0:00.03
72286 74.2 R 31T 0:09.21 0:37.73
72286 72.4 R 31T 0:09.24 0:37.71
72286 74.7 R 31T 0:09.24 0:37.80
একই প্রোগ্রাম, এখন ম্যাকরুবি সাথে। সমান্তরালে তিনটি থ্রেডও চলছে। এটি কারণ ম্যাকরুবি থ্রেডগুলি পসিক্স থ্রেড ( আসল "ওএস-স্তর" থ্রেড ) এবং কোনও জিভিএল নেই is
(jalcazar@mac ~)$ ps -M 38293
USER PID TT %CPU STAT PRI STIME UTIME COMMAND
jalcazar 38293 s002 0.0 R 0T 0:00.02 0:00.10 /Users/jalcazar/.rvm/rubies/macruby-0.12/usr/bin/macruby threads.rb
38293 0.0 S 33T 0:00.00 0:00.00
38293 100.0 R 31T 0:00.04 0:21.92
38293 100.0 R 31T 0:00.04 0:21.95
38293 100.0 R 31T 0:00.04 0:21.99
আবারও একই প্রোগ্রাম কিন্তু এখন ভাল পুরানো এমআরআই নিয়ে। এই প্রয়োগটি সবুজ-থ্রেড ব্যবহার করে এমন কারণে, কেবল একটি থ্রেড প্রদর্শিত হবে
(jalcazar@mac ~)$ ps -M 70032
USER PID TT %CPU STAT PRI STIME UTIME COMMAND
jalcazar 70032 s002 100.0 R 31T 0:00.08 0:26.62 /Users/jalcazar/.rvm/rubies/ruby-1.8.7-p374/bin/ruby threads.rb
আপনি যদি রুবি মাল্টি-থ্রেডিংয়ে আগ্রহী হন তবে আপনি আমার রিপোর্টটি ডিবাগিং সমান্তরাল প্রোগ্রামগুলি কাঁটাচামচ হ্যান্ডলারগুলি ব্যবহার করে আকর্ষণীয় দেখতে পাবেন।
রুবি ইন্টার্নালগুলির আরও সাধারণ পর্যালোচনার জন্য রুবি একটি মাইক্রোস্কোপের অধীনে পড়া ভাল।
এছাড়াও, ওমনিরেফের রুবি থ্রেডস এবং গ্লোবাল ইন্টারপ্রেটার লক সোর্স কোডটিতে ব্যাখ্যা করে যে কেন রুবি থ্রেডগুলি সমান্তরালে চলমান না।
আমি "সিস্টেম মনিটর" এই প্রশ্নের উত্তর দিতে দেব। আমি একই কোড (নীচে, যা মৌলিক সংখ্যা গণনা করে) চালিয়ে যাচ্ছি both উভয় ক্ষেত্রে আই 7 (4 হাইপারথ্রেডেড-কোর) মেশিনে চলমান 8 টি রুবি থ্রেড সহ ... প্রথম রানটি এখানে রয়েছে:
jruby 1.5.6 (রুবি 1.8.7 প্যাচলেভেল 249) (2014-02-03 6586) (ওপেনজেডিকে 64-বিট সার্ভার ভিএম 1.7.0_75) [এমডি 64-জাভা]
দ্বিতীয়টি সহ:
রুবি 2.1.2p95 (2014-05-08) [x86_64-linux-gnu]
মজার বিষয় হল, সিবিইউ জেআরবি থ্রেডের জন্য বেশি, তবে বর্ণিত রুবির জন্য সমাপ্তির সময়টি কিছুটা কম। গ্রাফ থেকে এটি বলা এক ধরণের কঠিন, তবে দ্বিতীয় (ব্যাখ্যা করা রুবি) রান প্রায় 1/2 সিপিইউ ব্যবহার করে (হাইপারথ্রেডিং নেই?)
def eratosthenes(n)
nums = [nil, nil, *2..n]
(2..Math.sqrt(n)).each do |i|
(i**2..n).step(i){|m| nums[m] = nil} if nums[i]
end
nums.compact
end
MAX_PRIME=10000000
THREADS=8
threads = []
1.upto(THREADS) do |num|
puts "Starting thread #{num}"
threads[num]=Thread.new { eratosthenes MAX_PRIME }
end
1.upto(THREADS) do |num|
threads[num].join
end
আপনি যদি এমআরআই ব্যবহার করে থাকেন তবে আপনি এক্সটি এক্সটেনশন হিসাবে বা রুবি-ইনলাইন রত্ন ব্যবহার করে সি তে থ্রেডেড কোডটি লিখতে পারেন।
প্রোডাকশন স্তরের সিস্টেমের জন্য আপনার যদি রুবিতে সত্যই সমান্তরালতার প্রয়োজন হয় (যেখানে আপনি বিটা নিযুক্ত করতে পারবেন না) প্রক্রিয়াগুলি সম্ভবত আরও ভাল বিকল্প।
তবে, এটি প্রথমে JRuby এর অধীনে থ্রেড চেষ্টা করে দেখার পক্ষে উপযুক্ত।
এছাড়াও আপনি যদি রুবির অধীনে থ্রেডিংয়ের ভবিষ্যতে আগ্রহী হন তবে আপনি এই নিবন্ধটি দরকারী মনে করতে পারেন ।
Parallel.map(['a','b','c'], :in_processes=>3){...
এখানে লিন্ডা এর রুবি বাস্তবায়ন (সমান্তরাল প্রক্রিয়াকরণ এবং ডিস্ট্রিবিউটেড কম্পিউটিং দৃষ্টান্ত) যা Rinda কিছু তথ্য নেই http://charmalloc.blogspot.com/2009/12/linda-tuples-rinda-drb-parallel.html
কারণ এই উত্তরটি সম্পাদনা করতে পারেনি, সুতরাং এখানে একটি নতুন উত্তর যুক্ত করুন।
আপডেট (2017-05-08)
এই নিবন্ধটি খুব পুরানো, এবং তথ্য বর্তমান (2017) পদক্ষেপ অনুসরণ করে না, নিম্নলিখিতটি কিছু পরিপূরক হিসাবে দেওয়া হয়েছে:
ওপাল একটি রুবি থেকে জাভাস্ক্রিপ্ট উত্স থেকে উত্স সংকলক। এটির রুবি কোরলিব একটি বাস্তবায়নও রয়েছে, এটি বর্তমান অত্যন্ত সক্রিয় বিকাশযুক্ত এবং এটিতে কাজ করেছে (ফ্রন্টএন্ড) কাঠামোর একটি বিশাল পরিমাণে কাজ করে। এবং উত্পাদন প্রস্তুত। জাভাস্ক্রিপ্টের ভিত্তিতে, এটি সমান্তরাল থ্রেড সমর্থন করে না।
ট্রুফ্লারলুবি হ'ল রুবি প্রোগ্রামিং ভাষার উচ্চ কার্যকারিতা বাস্তবায়ন। অরাকল ল্যাবস দ্বারা গ্র্যালিভিএম-এ নির্মিত, ট্রাফল্লুবিটি জেউবির একটি কাঁটাচামচ, এটি রুবিনিয়াস প্রকল্পের কোডের সাথে সংযুক্ত করে, এবং রুবি, এমআরআই, এখনও লাইভ বিকাশের স্ট্যান্ডার্ড বাস্তবায়ন থেকে কোড রয়েছে, উত্পাদন প্রস্তুত নয়। এই সংস্করণ রুবি দেখতে পারফরম্যান্সের জন্য জন্মগ্রহণ করেছে, আমি জানি না সমান্তরাল থ্রেড সমর্থন করে কিনা, তবে আমার মনে হয় এটি হওয়া উচিত should