GUIプログラミングとマルチスレッド

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

GUIプログラミングは、そのシーンにもよるが、マルチスレッドを意識する必要があるケースが往々にしてあり、なおかつ適切に使われていないと問題を引き起こす。しかもそれが適切に使われているかどうかは状況によって異なることさえありうるので、非常に難しい。

GUIにおいて、マルチスレッドを必要とする場面といえば、多くの場合は時間のかかる重い処理を行う際、他の処理も並行して行うといったことが挙げられる。例えば、非同期のネットワーク通信が挙げられるだろう。この場合、処理の開始、完了、失敗、中断などのイベントベースの処理になると言える。

これらの場合、OSレベル、あるいはフレームワークレベルで暗黙的にマルチスレッドを使っているというのであれば、それほど問題になることはない。万一それで問題となる場合は、そもそも使い方が間違えているか、OS及びフレームワークのバグの場合が多いからである。

一方、独自にマルチスレッド処理を行う場合は要注意である。macOS/iOSやGNU/Linuxシステム、BSD含めたPOSIXではpthread、Cocoa FramewordではGrand Central Dispatch(GCD)などがあるが、どこで並列処理を行うのか、どこでロックをかける必要があるのかなど、適切にマルチスレッド処理が書かれていないと、たちまちバグの温床になってしまう。しかもコンパイラーによって最適化が変わってしまうこともあるため、特に気をつけなければならない。

かといって、重い処理を行う際に利用者が操作できないようにする必要がないのにも関わらず操作できない状況になるというのは利用者にとっては迷惑極まりない。

これらのことから、GUIプログラミングでは必要な場所に適切にマルチスレッド処理を行うということが必要であると言える。これは難しいことだが、是非とも使いこなしていきたい。

タイトルとURLをコピーしました