Scratchのループ(くりかえす)について、考察してみました。
通常のループ
まずはシンプルにループしている間、変数の値を足し続けるループを作ってみます。

結果は次の通りです。
約900万までカウントされました。この数字はScratchの全力のループ回数と予想されます。マシンスペックによって変わると思います。
通常のループ×2
次にシンプルなループを二つ用意します。新たに追加したループは、最初のループの半分の時間で終わるようにしておきます。

結果は次の通りです。
一つ目のカウントは二つ目のカウントの2倍強となっています。また二つのカウントを足すと、最初のループの時のカウントとほぼ同じ約900万となります。そのため、ループが複数あると、Scratchの全力がそれぞれのループに按分されると予想されます。
画面描画処理を含むループ
次に画面描画処理を含むループを追加します。この処理も最初のループの半分の時間で終わるようにしておきます。

結果は次の通りです。
描画ありカウントは、約150となっています。これはScratchが画面描画を1秒間に30回行うという仕様に基づいていそうです。描画ありカウントは5秒間行っているので、30*5=150ということです。描画なしカウントは約450万ですが、これは最初のループの時の900万の約半分です。つまり前半5秒間は画面描画処理を含むループにつれられて1秒間に30回というブレーキがかかっていましたが、後半5秒間は全力でループを回せていたということになりそうです。
再描画をしないブロック内のループ
最後に、再描画をしないブロック内のループを追加します。
これも半分の時間で終わるようにしておきます。

結果は次の通りです。
描画なしのカウントは約450万と、全力でカウントできたのは再描画をしないブロックのループが終わってからになっています。また再描画なしのブロックのループは約670万回となっていて、通常のループよりも150%速くなっています。これは、実は最初のループはScratchの全力のうち、画面描画にもそれなりのパワーが取られていたことを意味していそうです。実際、再描画なしのブロックのループが回っているときは、画面描画は1秒に2回ほどのカクカクになってしまいました。
結果
今回の実験では、次のことがわかりました。
- 通常のループでは、画面描画に影響がない範囲で全力でループが回る。
- 複数のループがあると、Scratchの全力がそれぞれに分けられる。
- 画面描画を含むループが実行された場合、すべてのループが1秒間に30回のスピードで回る。
- 再描画をしないブロックのループが実行された場合、画面描画に影響が出るほど全力でループが回る。
考察
一般的なプログラム言語では、全力の無限ループを作成すると、CPUリソースを全力で消費してしまいます。その結果CPU使用率が100%になったり、画面が固まったりするので、良くないことだと言われています。そして、ループの中にウェイトを入れるなどして、他の処理にもCPUリソースを使わせるような実装をすることが必要です。
しかしScratchでは、複数の無限ループを作成しても、CPUリソースは公平に割り当てられます。そして、ループにウェイトを入れなくても、画面が固まったりすることはありません。
ただし、再描画をしないブロックのループについては、上記が当てはまらず画面が固まります。そのため「再描画をしないブロック」と「ループ」の組み合わせをするときには注意をしたほうが良さそうです。
サンプルプロジェクト
https://scratch.mit.edu/projects/618585447