« マルチスレッド貧乏性 | Main | マルチスレッド貧乏性(3) »

December 12, 2016

マルチスレッド貧乏性(2)

このタイトルの最初の記事を書く1日前(つまり2016/12/9)に、あまり肯定的な議論はなかったように見えた竝列Emacsのテストアナウンスがemacs-develメーリングリストに流れた。もしかしたら、40周年を記念してノリでやっちゃったのかもしれないが、豫告通りその後すぐにmasterにマージされたので、こちらでもビルドして試してみた。widgetsと違って、configureでオプション指定とかしなくてもThreadsの機能が使えるようになるのだが...。

端的に言えば、現時點ではコアダンプのオンパレードであり、まだアルファテスト以前のレベルと言わざるを得ない。この品質でmasterにマージすることを決斷したのは、開發者以外のより多くの人にもテストして慾しかったからではないだろうか。少なくとも私が書いた簡潔なTPでも、GUI起動したEmacsではすぐにクラッシュする。しかし、端末から起動(-nwオプション)したEmacsでは動いた。その後、make-threadの引數にファンクション名ではなくlambda式を書くと卽死することが分かった。ここまでで、これ以上お試しする氣が失せてしまった。ダメ出しはいくらでも出來るが、ツイッターでもこの件ではコメントしないと決めた。

src/thread.cmake-threadのところを眺めてみると、スレッド用のリソース確保とスレッド生成の處理を行なっているようには見える。しかし、スレッドライブラリ(POSIX Thread?)のスレッド生成を使うということは、そのスレッドはOSによって制御されるのであり、絲が切れた凧狀態になるような氣がする。實際にスレッドを起動すると、フォアグラウンドのEmacsは操作不能になっていた。これなら非同期プロセスの方がまだマシである。コマンドループとはどのように折り合おうとしているのだろうか。

これまでのEmacsなら、elispを起動すると編集操作がビジー狀態になり、C-g等で强制的にelispを止めない限り操作不能になっていたのを、スレッド起動によりelispがバックグラウンドで動作し、編集の邪魔をしないよう振る舞ってくれることを、誰もがイメージしていたのではないか。

今のままの實裝だとすれば、早晚この機能は誰からも使用されないものとなるのではないかという氣もする。elispが他のスクリプト言語と決定的に違うのは、それがエディタ上で動作しているということであり、エディタの使用性を損ねるような機能では困るのである。よって、スレッドの實裝は自ずと他のスクリプト系言語と違ってくるはずだ。

個人的には、Emacsのスレッド機能はあくまでエディタのコマンドループ上で編集處理がない時閒をスレッドに割り當てるものだと思っていた。つまり、通常のelisp實行が編集をストップして同期的に動くのに對し、スレッド起動されたelispはコマンドループのバックグラウンドで動く優先度の低い處理をイメージしていた。スレッドがいつまでも中斷しなければ、コマンドループに强制的に中斷させられる必要があるので、それをどう實現するかという點に興味があったのだが、まさかスレッド關連のライブラリ關数を呼んでいるとは...。

ここしばらくは、emacs-develメーリングリストの議論から目が離せない(笑)

|

« マルチスレッド貧乏性 | Main | マルチスレッド貧乏性(3) »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/74224/64613881

Listed below are links to weblogs that reference マルチスレッド貧乏性(2):

« マルチスレッド貧乏性 | Main | マルチスレッド貧乏性(3) »