액터 모델 및 zeromq를 사용하는 응용 프로그램을 확장하는 데 문제가 있습니다. 간단히 말해서 : 소켓을 통해 통신하는 수천 개의 스레드를 생성하려고합니다. Erlang 형식의 메시지 전달과 관련이있는 것과 유사합니다. 멀티 코어/퍼포먼스의 이유로이 작업을 수행하지는 않지만 이런 식으로 프레임을 작성하면 매우 깨끗한 코드를 얻을 수 있기 때문입니다.ZeroMQ 및 액터 모델
zmq 개발자가 달성하고자하는 것처럼 철학적 관점에서 보았습니다. http://zeromq.org/whitepapers:multithreading-magic
그러나 실제적인 제한이있는 것처럼 보입니다. 1024 inproc 소켓에서 "ZMQError : 너무 많은 열린 파일"오류가 발생하기 시작합니다. TCP는 나에게 전형적인 "어설 션 실패 : fds.size() < = FD_SETSIZE"충돌을 제공합니다.
Inproc 소켓에이 제한이있는 이유는 무엇입니까? 작동 시키려면 항목을 그룹화하여 소켓을 공유해야했습니다. 더 좋은 방법이 있습니까?
zmq는 이러한 종류의 작업에 잘못된 도구입니까? 즉, 액터 메시지 전달 라이브러리보다 네트워크 라이브러리가 더 많습니다.
ulimit을 통해 fst limut의 수를 늘려보십시오. –
** inproc ** 제한은이 자원 설명자 테이블의 OS/커널 크기 조정에서 비롯됩니다. ** ZeroMQ **는 액터 기반 시스템에서 가치있는 훌륭한 프레임 워크입니다. 커널 조정과 ZMQ-IO- 쓰레드 내부를 한 번 더 자세히 살펴볼 필요가 있습니다. – user3666197
불행히도, Windows에서 실행되어야합니다 :/제한을 변경할 수 있기를 바랍니다. 저는 ZeroMQ를 정말 좋아합니다. 특히 복잡한 응용 프로그램 동작을 상태를 공유하지 않는 구성 요소로 분리 할 수있게 해주는 방식입니다. 따라서이 제한은 다소 성가신 일입니다. – janto