円周率を計算するようなホビープログラムに限らず、グラフ探索・組み合わせ探索のように長時間CPUを使うワークというのは実務でも出てきます。 こういうとき、UI設計の基本として「重い処理はワーカースレッドに任せ、UIスレッドはすぐに処理を返す」というのは最近では常識になってきた感がありますし、C#のasync/awaitのように処理系側のサポートも充実してきました。 これに加えてもう一つ大事な基本があります。 【CPUをちょくちょく解放すること】 です。 シングルコアのマシンで特に顕著な影響が出ますが、長時間CPUを使う計算をしていると他のプロセスはまったく動けなくなります。OSシェルさえ。マルチコアマシンでも、コア数と同じ数だけそういう重いプロセスが出現した時点で同じことになります。 プリエンプティブマルチタスクで動作する現代のOSでも、自発的にCPUを解放しないプロセスは高頻度に制御を奪わ