KH-FDPLのノート0005
(1) マルチスレッドについて
- KH-FDPLでは、一つのVMで複数のアプリを並列で動作させる仕組みを持たせようと思っています。しかしそれはいわゆるマルチスレッドとは微妙に異なります。
- どう異なるのかの説明はあとに譲って、まずはなぜそのような並列動作を実現させようと思っているのかを説明させてください。
- 並列動作ができれば、アプリAの実行中にオブジェクトが変わっていく様子をアプリBが参照したりできるようになります。これはデバッグにも、プログラムの学習の様子を理解するのにも、大変有効だと思います。
- さらにこれはOSのマルチスレッド機能を使うものではなくて、KH-FDPLが自分のCPU時間を切り貼りして実現するものです。ですからスケジューリングなどもOSに依存することなく、共通に行えます。したがって、OSがマルチタスクやマルチスレッドに対応していなくても、KH-FDPL内ではマルチタスクができます。
(2) KH-FDPLでのマルチスレッドの方法
- まずKH-FDPLではCPUにコアが複数あっても、その中の一つしかアプリの実行に割り当てません。要するに、単に内部で切り替えながら実行しているだけです。これで「同時に複数のアプリが実行して競合してしまう」問題を回避します。
- またアプリは不意にスレッド切り替えを食らって、オブジェクトを中途半端な状態にしてしまう、という懸念がありますが、これもKH-FDPLでは基本的に生じません。というかそもそもlock命令がKH-FDPLにはないのです。ロックを掛けてオブジェクトの整合性を守るのではなくて、check-point命令(仮称)が来た時にスレッドを切り替えるのです。
- つまり起動時にlockみたいなもので、check-point命令というのは、unlock+lockみたいなものです。だからcheck-point命令を入れ忘れると、全くスレッドが切り替わらなくなって強制停止させるしか方法が無くなります。それでいいのです。それがいやなら、check-point命令を好きなだけ入れてください。それだけのことです。
- こうすることで何が嬉しいのかというと、lock入れ忘れによる悩ましいバグが無くなるのです。初心者にlockはつらいだろうと私は思うのです。check-point命令の入れ忘れは簡単に気付けます。この処理をしている間、他のアプリの反応が悪くなるんだよなー、とか。また、KH-FDPL側もこのアプリは最大で○○ミリ秒間、check-point命令を実行しない期間がありました、みたいな報告をくれます。
(3) lockモデルが好きな人は
- でも初心者以外はlock方式のほうがいいかもしれません。結構なことです!それならそういう言語を作りましょう。その言語は、デフォルトで毎行行頭にcheck-point命令を付与したバイトコードを生成します。でもlock期間はその付与を抑制します。それでいいでしょう。
こめんと欄