Haskellの親プロセスと分岐した子プロセス間でデータを共有するにはどうすればよいですか?
-
04-07-2019 - |
質問
そもそもHaskellを使用して子プロセスをforkする方法さえありますか?
また、パイプがデータ共有の質問に対する明白な解決策である場合-パイプを使用する以外にそれを行う他の方法はありますか? Cでの共有メモリセグメント(shmget、* shmat、shmdt、およびshmctl関数)の使用に精通しています。 Haskellはこれを模倣できますか?もしそうなら、どのように?
お手数をおかけしますが、よろしくお願いいたします。
私は関数型プログラミング言語に非常に慣れていないことを認めなければなりません。Haskellに関してはなおさらです。愚かなことを言ったなら、私を許してください(そして私を訂正してください)。
解決
さらに、ソフトウェアトランザクションメモリ、つまりTVarとTChannelを使用してください。
同じ本、別の章をお勧めします: http:// book。 realworldhaskell.org/read/software-transactional-memory.html
このテクニックの実際の動作の良い小さな例を以下に示します。 http://sequence.complete.org / node / 257
他のヒント
OPは、スレッドではなくサブプロセスとの通信について尋ねました。そのため、パイプはそれを行うための完璧な方法です。必要に応じて、HaskellからCライブラリ関数を直接呼び出すこともできますが、トリッキーになる可能性があります。
この質問の答えはこちらです:プロセス通信を処理する標準的なHaskellライブラリはありますか?
MVarまたはチャンネルを使用します。 RealWorld Haskellの第24章を参照してください。 http://book.realworldhaskell.org/read/concurrent-and- multicore-programming.html
Unixスタイルのプロセスを実際にフォークする場合は、
この場合、MVarとTVarはプロセス間通信を行わないため、IParを使用することはできません。 IPCのすべての標準テクニック(パイプ、ソケットなど)は引き続き機能します。より高度なものが必要な場合は、Cloud Haskell http://www.haskell.org/haskellwiki/をご覧ください。 Cloud_Haskell