LINUX.ORG.RU

erlang|nif


0

0

Добрый вечер. Есть недопонимание как _нормально_ пользоваться NIF. В доках написано:

Avoid doing lengthy work in NIF calls as that may degrade the responsiveness of the VM. NIFs are called directly by the same scheduler thread that executed the calling Erlang code. The calling scheduler will thus be blocked from doing any other work until the NIF returns.

Теперь допустим есть задача: надо реализовать структуру данных, ну явно мутабельная(+ нужна скорость), по своей сути. Умеет read и write. Read может быть параллельный и write только 1. Write не лочит read.

Соответсвенно возникает проблема, что при достаточно долгом write, многие read процессы просто лочатся.

Как правильно делается вышеописанное?



Последнее исправление: arhibot (всего исправлений: 2)

А разве релиз Erlang'а с NIF'ами уже был? AFAIK были только R12B0x - суть пререлизы и бэты.

Led ★★★☆☆
()
Ответ на: комментарий от Led

[quote]The NIF concept was introduced in R13B03 as an EXPERIMENTAL feature. The interfaces may be changed in any way in coming releases. The plan is however to lift the experimental label and maintain interface backward compatibility from R14B.[/quote]

arhibot
() автор топика
Ответ на: комментарий от arhibot

в R13B04 API и реализация NIF полностью поменялись.

R13B0x - это далеко не релизы

Led ★★★☆☆
()

>> Соответсвенно возникает проблема, что при достаточно долгом write, многие read процессы просто лочатся.

Как правильно делается вышеописанное?

И в чем неправильность очевидного решения - выделить отдельную нить для write?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

И так есть N-процессов читателей и один write-процесс лочит все*почти всё*. Как я понял надо забить на нифы и делать через port driver.

arhibot
() автор топика
Ответ на: комментарий от arhibot

>> в чем неправильность очевидного решения - выделить отдельную нить для write?

И так есть N-процессов читателей и один write-процес

Я сказал «нить», это значит - нить ОС, которая не видна Erlang VM.

tailgunner ★★★★★
()
Ответ на: комментарий от arhibot

> м. и как ты себе это представляешь?

А это я себе должен представлять? :)

Есть 2 nif функции read и write. Что дальше?

С read проблем нет, я правильно понимаю? А write прверяет, есть ли другие write и, если есть, говорит Erlang'овскому рантайму «останови меня». В общем, драйверный интерфейс ОС, вид сбоку.

tailgunner ★★★★★
()
Ответ на: комментарий от arhibot

>Проходите дальше, полно других тем для троллинга.

Даже не думал троллить.

Ещё раз: откуда вы взяли такой категоричный тезис, что «erlang не пригоден для этой части задачи»?

Led ★★★☆☆
()
Ответ на: комментарий от Led

Алгоритм подразумевает множество блокировок и мутабельность данных. Могу дать ссылку на статью.

arhibot
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.