2011-12-03 4 views
1

최근 내가 이미 알고있는 Boost와 함께 POCO 및 ACE 네트워킹 프레임 워크를 접했습니다.C/C++ 고주파 메시징 프로그램

제 질문은 버클리 소켓이있는 일반 C 프로그램보다 메시지 전달에 더 빠른 라이브러리입니까? 이 라이브러리는 멀티 스레딩 등의 기능을 추가하기 때문에 인기가 있습니까? 이는 성능 요소에 도움이됩니까?

Linux에서 고성능 메시징 시스템을 작성하려고하지만 ACE, POCO 및 Boost를 피하고 berkeley 소켓과 함께 Linux 스레드 OS 기능을 사용해야하는 경우 해결할 수 없습니까?

다른 말로하면, 일반적인 코드에 대해 신경 쓰지 않아서 "STL friendly"등입니다. 단지 어셈블리를 작성하지 않고도 원시 성능을 원합니다.

답변

1

0MQ (aka ZeroMQ) 아직 보셨나요? 자신의 웹 사이트에서 인용 :

ØMQ \zeromq\: 
 Ø  The socket library that acts as a concurrency framework. 
 Ø  Faster than TCP, for clustered products and supercomputing. 
 Ø  Carries messages across inproc, IPC, TCP, and multicast. 
 Ø  Connect N-to-N via fanout, pubsub, pipeline, request-reply. 
 Ø  Asynch I/O for scalable multicore message-passing apps. 
 Ø  Large and active open source community. 
 Ø  30+ languages including C, C++, Java, .NET, Python. 
 Ø  Most OSes including Linux, Windows, OS X. 
 Ø  LGPL free software with full commercial support from iMatix. 
+0

안녕하세요. 대단히 감사합니다. 나는 전에 이것을 들어 본 적이 없다! – user997112

+0

그것은 꽤 깔끔하고, 나는 몇 년 동안 그것을 따라 왔습니다. 이전 버전에서는 예를 들어 2 대 처리량 테스트를 사용했지만 그럴 수는 있습니다. 또한 사이트에는 수많은 청초한 백서가 있습니다. 이미 여러 장소/프로젝트에서 사용되고 있습니다. –

+0

헤이 더크, 호기심에서 건축에 대해 많이 알고 있니? 기본 C 아키텍처 여야한다고 생각합니까? – user997112

0

사용 사례를 많이 공유하지 않고 많이 묻습니다. 작성한 글에서 네트워크에 연결된 시스템간에 메시징을해야 할 필요가있는 것 같습니다. 그것은 모든 피어 투 피어, 아니면 일부 기계 "서버"및 다른 클라이언트입니까? ACE와 같은 라이브러리는 모든 유형의 소켓 통신과 멀티 쓰레딩을위한 간단한 편의 클래스부터 생각할 수있는 거의 모든 모델을 사용하여 완전한 서버까지 모든 것을 제공합니다.

어떤 종류의 서버가 필요하다고 가정하면 스레딩 또는 단일 스레드 비동기와 관련된 모든 논의가 있습니다. 다시 말하지만, 유스 케이스에 따라, 하나는 다른 것보다 "더 좋을 것이다"(실제로 당신이해야 할 일에 달려있다).

네트워크 부분에서 안정적인 주문 메시지가 필요하거나 패킷이 손실되었다는 것을 감지 할 수있을 때까지 각 메시지가 더 이상 필요하지 않습니까? 신뢰성을 위해 일반적으로 TCP를 기반으로하지만, 필요한 작업에 따라 UDP를 기반으로하는 프로토콜을보다 빠르게 실행할 수 있습니다.

요구 사항이 매우 간단하고 네트워크 멀티 스레드 코드를 많이 작성한 적이 없다면 모든 것을 스스로 재발 명하려는 것보다는 잘 작성된 패키지를 사용하는 것이 더 나을 것입니다.

+0

죄송합니다. 특정 시나리오를 염두에 두지 않고 직접 가르치기 위해이 작업을 수행하고 있습니다. 나는 다른 두 개의 다른 기계에서 보내지는 초당 수신 할 수있는 메시지의 수를 벤치 마크 할 기계를 갖게 될 것입니다. – user997112

+0

주문과 관련하여 확실하지 않습니다. FIX (http://en.wikipedia.org/wiki/Financial_Information_eXchange) 메시지를 보내려고합니다. 목표는 초당 가장 많은 메시지를 캡처 할 수있는 다른 시스템을 사용하는 것입니다. . 나는 전자 무역 주문을 시뮬레이션하고 있기 때문에 그들이 잃어 버릴 지 걱정할 것입니다. 그래서 TCP입니까? – user997112

+0

그래도 수신 한 메시지로해야 할 일을 파악해야합니다. 아마 당신의 설정에 적합한 아키텍처가 필요합니다.많은 TCP 패킷을 수신해야하는 경우 비동기 단일 스레드가 가장 많은 처리 속도를 제공하지만 일단 해당 패킷으로 작업해야하면 그림이 명확하지 않게됩니다. –