Как можно разделить данные между родительским и разветвленным дочерним процессом в Haskell? - PullRequest
5 голосов
/ 26 октября 2008

Как бы я вообще начал разветвлять дочерний процесс с использованием Haskell?

Кроме того, если каналы являются очевидным решением вопроса обмена данными - есть ли другой способ сделать это, кроме использования каналов? Я знаком с использованием сегментов разделяемой памяти в C (функции shmget, * shmat, shmdt и shmctl). Может ли Хаскелл подражать этому? Если да, то как?

Я был бы очень признателен за любую помощь, которую вы можете сэкономить.

Я должен признать, что я очень плохо знаком с функциональными языками программирования, особенно в том, что касается Haskell. Так что прости меня (и, пожалуйста, поправь меня), если я сказал что-то глупое.

Ответы [ 4 ]

2 голосов
/ 26 октября 2008

Еще лучше, используйте программную транзакционную память, то есть TVars и TChannels.

Рекомендую одну и ту же книгу, другую главу: http://book.realworldhaskell.org/read/software-transactional-memory.html

Вот хороший небольшой пример этой техники в действии: http://sequence.complete.org/node/257

1 голос
/ 21 февраля 2014

ОП спросил о связи с подпроцессом, а не с потоком. Для этого трубы - прекрасный способ сделать это. Вы также можете вызвать функцию библиотеки C непосредственно из Haskell, если хотите, хотя это может быть сложно.

Этот вопрос имеет лучший ответ здесь: Существует ли какая-нибудь стандартная библиотека на Haskell, связанная с процессом взаимодействия?

0 голосов
/ 21 февраля 2014

Если вы хотите на самом деле разветвить процесс в стиле Unix, вам нужно использовать forkProcess, как указано http://hackage.haskell.org/package/unix-2.4.2.0/docs/System-Posix-Process.html

В этом случае MVars и TVars не осуществляют межпроцессное взаимодействие, поэтому их нельзя использовать для IPC. Все стандартные методы для IPC (трубы, розетки и т. Д.) Все еще работают. Если вы хотите что-то более высокого уровня, проверьте Cloud Haskell http://www.haskell.org/haskellwiki/Cloud_Haskell

0 голосов
/ 26 октября 2008

использовать MVars или каналы. Смотрите главу 24 из RealWorld Haskell: http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...