マルチスレッド並列機能
マルチスレッド
- マルチプロセッサに並列に計算を割り付ける単位
- 1つのプロセス内のメモリを共有
- プロセスより軽いタスクスイッチ
EusLispのマルチスレッド化
- 関数の評価をスレッドに委託
- ヒープメモリを共有 (メモリ割り付け、ゴミ集めは逐次)
- コンテキストは分離
(catch-throwやlet変数の参照不可、2種類のスペシャル変数)
構文
- スレッドの作成
(make-thread n) ;; n個のフリースレッドをプールに入れる
- スレッドへの計算の割り付け
(thread func . arg) ;; thread オブジェクトを返す
(wait-thread thread) ;; threadから結果を受け取る
(parlist . arg) ;; 引数を並列に評価して結果をリストにする
- 同期
(mutex lock . form) ;; 相互排除をかけてformを評価
(reader R/W-lock . form ) ; リーダーライタ・ロック
(writer R/W-lock . form )
condition-variable, semaphore, sync-memory-port, barrier-sync
並列性能