2011-12-15 2 views
2

Я работаю над внешним DSL в F #. Язык должен позволять параллельные циклы:Interprocess communication in F #

start 5 times 
    operation 

Это начинается operation асинхронно 5 раз и продолжает с исполнением. Тем не менее, все немного сложно, потому что operation использует небезопасную библиотеку (не избегая этого), поэтому я полагаю, что каждая итерация должна запускаться в отдельном процессе.

Предполагая, что это единственный путь вокруг проблемы с потоком-небезопасностью. Как я могу запустить процесс и передать поддерево исполнения (ограниченный союз в этой точке), который должен быть выполнен?

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

Кроме того, производительность в этом случае не очень важна.

EDIT: Оказывается, мне не нужна никакая связь после того, как процесс начался. У меня возникает желание просто передать строку выражения как параметр запуска процесса и позволить ему разобрать/выполнить его. Меня все еще интересуют альтернативы, но я полагаю, что это не становится проще.

+1

Можете ли вы использовать примитивы синхронизации ('ManualResetEvent',' Семафор' и т. Д.) Для обеспечения безопасности потоков? Это кажется намного проще, чем IPC. – Daniel

+0

Нет, в том смысле, что библиотека огромна, и мне не разрешено вносить какие-либо изменения в нее, плюс каждый звонок должен действительно запускаться одновременно. –

+0

Достаточно ли использовать несколько AppDomains? – Daniel

ответ

0

Выполнение каждой операции в отдельном AppDomain - если возможно - было бы проще IPC.