Порт Erlang C - последовательное или параллельное выполнение?

Порты Erlang и безопасность потоков

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

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

Спасибо


person Justin    schedule 25.04.2015    source источник
comment
Чем это будет отличаться от того, как оно выполняется на машине, если оно выполняется как единый процесс?   -  person zxq9    schedule 25.04.2015


Ответы (1)


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

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

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

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

person Lol4t0    schedule 25.04.2015