I/O バインドされたスレッドを使用して Ruby MRI で並列処理を実現する方法

言語は人々によって使用されているだけでなく、Web サイトでも使用されています。言語は、特に Ruby が問題となる場合、プログラマーが直面する主要な問題の 1 つです。 Ruby のパフォーマンスは、プログラマーがこの言語を使用したくない理由の 1 つになる可能性があります。 Ruby のパフォーマンスに関する苦情は、このフレームワークが現在プログラマーによって使用されている他のフレームワークより遅れていることを示しているだけです。 Ruby のせいでこうした問題が発生したとしても、使いやすいです。

問題は常に、Ruby の MRI で並列処理をどのように達成できるかということです。

答えとしては、最良の解決策は 1/0 バインドされたスレッドを使用することです。スレッドは、今日のプロセッサーで見られる並列処理に影響を与える可能性があります。 Ruby MRI は並列処理をサポートしていないことが知られています。スレッドがたくさんあるにもかかわらず、Ruby MRI では継続的に実行されるスレッドは 1 つだけですが、これは GIL のせいです。

Ruby MRI は並列処理の達成には役に立たず、スレッドに制限を課す原因はすべて GIL のせいであるという記述があります。このため、Ruby は役に立たず、並列処理を達成するのにあまり役に立たないと考えられています。 CPU 依存の操作を使用している場合、これらの記述は十分に当てはまります。なぜ? CPU バウンドの操作を使用する場合、優れたパフォーマンスは決して明らかではなく、常に低いパフォーマンスになります。これはすべて、スレッドのスケジューリングがユーザー空間によって処理され、GIL が重要な役割を果たしているためです。スレッド。

これらのステートメントとは反対に、I/O バインドされたスレッドは、Ruby MRI が並列処理に達するのに役立ちます。 I/O バウンド スレッドの速度は、コンピュータの I/O によって制限されます。 I/O バインドされたスレッドを処理するのは、カーネル空間にある Ruby インタープリターです。 Ruby インタープリタは外部に配置されているため、I/O バインドされたスレッドは制限がないため自由に実行でき、GIL が存在しないため並列実行できます。カーネル空間は、I/O バインドされたスレッドのスケジュールを担当し、多数のハブ上でスレッドを継続的に実行できるようにします。

スレッドを制限なく実行して並列処理に到達させたい場合は、I/O バインドされたスレッドを備えた Ruby MRI が最適なオプションです。 CPU バウンドの操作を使用する場合とは異なり、GIL が存在するため、スレッド内で多くの制限が発生する可能性があります。どれだけ多くのスレッドを作成しても、GIL が存在する場合、同時に実行できるスレッドは 1 つだけです。それにもかかわらず、I/O バウンドのスレッドで Ruby MRI を使用すると、パフォーマンスが向上し、確実に並列処理に到達します。また、I/O バウンド タスクに取り組んでいる場合は、I/O バウンド スレッドを備えた Ruby MRI が最適です。これは、並列実行でき、複数のスレッドの使用を妨げないためです。スレッドは常に安全である必要があることに注意してください。

最新のアップデートを購読する

関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

jaJapanese