У меня есть код C++, реализующий специальный протокол через последовательный порт. Код является многопоточным, внутренне опрашивает последовательный порт и выполняет собственную циклическую обработку. Я хотел бы вызвать этот драйвер из erlang, а также получать события от этого драйвера. Меня беспокоит то, что этот код C++ является многопоточным, а также с сохранением состояния, что означает, что когда я вызываю определенную функцию в драйвере, он внутри кэширует вещи, которые будут использоваться/требоваться при последующих вызовах драйвера. Мои вопросы
1. Запускается ли NIF в том же процессе ОС, что и остальные мои процессы erlang, или NIF запускается в отдельном процессе ОС?
2. Имеет ли смысл деформировать этот многопоточный код C++ с отслеживанием состояния с помощью NIF?
4. Если NIF не является правильным подходом, как мне лучше заставить Elrang говорить туда-сюда с этим кодом C++? Я также предпочитаю, чтобы мой код C++ находился внутри того же процесса ОС, что и остальные мои процессы Erlang, и, похоже, связанные драйверы являются опцией, но не уверен, что многопоточная природа моего кода C++ подойдет для этого. модель. Кроме того, я слышал, что они могут испортить планировщик elrang?