2012-12-12 3 views
3

데이터베이스 폴링 (동기 저장 프로 시저 호출을 통해)에서 메시지 큐 (pub/sub를 통해)로 전환 할 때 기술적 인 글을 쓰고 있습니다. 나는 데이터베이스를 폴링하는 방법이 AMQP 중개자에 대한 연결을 설정하고 메시지 처리자를 구성하는 것보다 훨씬 더 많이 무겁고 무겁다는 것을 설명하고 싶습니다.epoll 작동 원리에 대한 일반적인 설명?

누군가가 여기에서 설명을 해 주거나 소켓에서 새로운 데이터를 알릴 때 epoll 작동 방식에 대한 좋은 고급 지침서를 가르쳐 주시겠습니까?

+1

'http : // en.wikipedia.org/wiki/Epoll'또는 'http://www.kernel.org/doc/man-pages/online/pages/man4/epoll.4.'를 읽었습니까? html' 둘 다 일반적인 설명이 있습니까? 또한,'epoll '을 설명하는 것이 여러분이 논의하는 차이점을 설명하는 데 어떻게 도움이되는지 확신 할 수 없습니다. 데이터베이스 파일에서 inotify를 epoll 할 수 있습니다. 그렇지 않으면 메시징 시스템 아래의 큐를 epoll 할 수 있습니다 ... 그래서 무엇을 목표로합니까? – abarnert

+0

죄송합니다. 실수로 질문을 너무 일찍 게시했습니다. 나는 그것을 업데이트했다. 그게 사물을 분명히합니까? – bitcycle

답변

3

"어떻게 epoll이 작동하는지"사용자 관점에서 어떻게 작동 하는지를 가정합니다 (코드가 어떻게 통지되는지, 어떻게 처리해야하는지 등). 보기 (epoll의 구현 방법과 동일).

짧은 버전은 매우 간단합니다 : 당신이 가로 질러 앞뒤로 많은 데이터를 전달하지 않는, 그래서 그것은 불투명 한 데이터 구조에 대한 핸들을 사용

  1. : 그것은 두 가지를 제외하고, 단지 poll처럼 커널 경계.
  2. poll에는 특정 상황에서보다 효율적인 코드를 작성할 수있는 (특히 가장자리 트리거 및 원샷 알림) 옵션이 있습니다.

(그것은 단지에서 작동한다는 사실도있다 리눅스. BSD 및 관련 시스템 솔라리스 등, /dev/poll 있으며, 일부 * nixes도 아무것도 없다, 같은 몇 가지 이점을 얻을 수있는 매우 다른 방식으로 kqueue을 가지고 해당. 당신이 휴대용 코드를 작성하려는 경우, 당신은 poll를 사용하거나 libevent 같은 몇 가지 높은 수준의 라이브러리를 사용하거나 자신 libevent의 동등한를 작성해야 하나.)

을 이미 selectpoll을 이해하면, 참조로 연결되어있는 the Wikipedia articlethe blog post은 그 (것)들은, 당신이 알 필요가있는 거의 모두를 말하고, man page는 어떤 간격든지 기입 할 것이다.

그렇지 않은 경우 poll에 대해 자세히 알아보고 그 후에야 epoll이 다른 방법을 배우는 것이 의미가 있습니다.

저는 이것이 당신의 주된 질문과 어떻게 관련이 있는지 확실하지 않습니다. 데이터베이스 파일에 epollinotify 또는 메시징 시스템의 기초가되는 pipe 또는 socket, 또는 Linux의 파일 설명자로 표시 될 수있는 그 밖의 모든 것에 대해 epoll을 이해하는 것이 얼마나 도움이되는지 잘 모르겠습니다. 데이터베이스 폴링 대 메시지 대기열 폴링 간의 차이점. 물론 둘 사이에 큰 차이가 있지만 이벤트 유발 메커니즘은 그 중 하나가 아닙니다.