Как можно разделить данные между родительским и разветвленным дочерним процессом в Haskell?

StackOverflow https://stackoverflow.com/questions/238379

  •  04-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Если вы хотите на самом деле форкнуть процесс в стиле 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top