2015-01-04 7 views
1

У меня проблемы с расширением приложения, использующего модель актера и zeromq. Проще говоря: я пытаюсь создать тысячи потоков, которые обмениваются данными через сокеты. Подобно тому, что можно было бы сделать с передачей сообщения типа Erlang. Я не делаю этого по причинам многоядерности/производительности, но потому что обрамление его таким образом дает мне очень чистый код.ZeroMQ и модель актера

С философской точки зрения это звучит так, как будто это то, что хотели бы сделать разработчики zmq, например. http://zeromq.org/whitepapers:multithreading-magic

Однако, похоже, существуют некоторые практические ограничения. В 1024 inproc сокетах я начинаю получать ошибку «ZMQError: Too many open files». TCP дает мне типичное «Assertion failed: fds.size() < = FD_SETSIZE».

Почему у сокетов inproc этот предел? Чтобы заставить его работать, мне пришлось группировать элементы для совместного использования сокета. Есть ли способ лучше?

Является ли zmq неправильным инструментом для такого рода работ? т. е. это еще больше сетевая библиотека, чем библиотека передачи сообщений актера?

+1

Попробуйте увеличить количество fds limut через ulimit –

+0

** Ограничение 'inproc' ** исходит из определения размера OS/ядра этой таблицы дескриптора ресурса. ** ZeroMQ ** - отличная система, поэтому стоит в актерских системах. Вам нужно будет копать глубже в настройках ядра и внутренних элементах ZMQ-IO после настройки валовой шкалы/задержки/производительности. – user3666197

+0

К сожалению, он должен работать на окнах:/Надеюсь, я могу изменить предел. Мне очень нравится ZeroMQ, особенно то, как это позволяет мне отделить сложное поведение приложения к компонентам, не разделяющим состояние, поэтому эти ограничения несколько раздражают. – janto

ответ

0

ZMQ использует дескрипторы файлов как «ресурсный блок» для соединений inproc. Существует предел для файловых дескрипторов, установленных ОС, вы должны иметь возможность изменить это (нашли несколько потенциальных возможностей для Windows с быстрым поиском Google), хотя я не знаю, каково влияние производительности.

Похоже, что это связано с библиотекой ZMQ, используя C-код, который переносится среди систем для открытия новых файлов, а не собственный код Windows, который не страдает от этого же ограничения.

Смежные вопросы