2015-04-25 4 views
2

Erlang ports and thread safetyПорт Erlang C - серийное или параллельное исполнение?

«С портами, однако,„контролировать процесс“действует как сериализации (как и в расположенных в ряд) слое, что означает запросы обрабатываются один за другим, а не все сразу. Более того, считаю (но не знаю точно), что порты коммуникационного протокола также требуют этого последовательного исполнения. "

Если я запускаю большое количество процессов портов Erlang, каждый из которых подключен к одному и тому же драйверу C, кто-нибудь знает, будет ли код C выполняться последовательно или параллельно параллельными процессами Erlang? (Я подозреваю, в серии)

Thx

+0

Как это будет отличаться от того, как оно выполняется на машине, если оно выполняется как один процесс? – zxq9

ответ

1

Erlang описывает только программа связи через порты, а не выполнение кода. Хотя у вас есть одна точка сериализации, и все общение проходит через одного актера, это не значит, что вы не можете распространять работу в целом. Вы можете параллельно выполнять свою C-программу, как вам угодно, даже с одним портом.

Порт выполнен в виде трубы, поэтому он требует последовательной связи. Но вы можете открыть много каналов связи, все из которых работают полностью независимо друг от друга.

Это означает, что ваши различные порты будут независимы и все общение через независимые порты будет параллельна

Hovewer, луч имеет ограниченную мощность пула потоков, в котором выполняется код. Каждое событие связи с портом будет использовать поток на время передачи данных. Если у вас много портов и высылаете много данных, это время может стать значительным, поэтому порты начнут влиять друг на друга. В этом случае вам может потребоваться увеличить сумму асинхронных потоков, которые используются для связи с IO и портами