ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Polling, Interrupt 방식
    네트워크 2019. 4. 22. 11:24

    배경

    타운홀 리뉴얼 과정에서 현황판의 데이터를 가져오는 방식을 polling 방식, interrupt 방식로 할 것인지 결정해야 했습니다. 10초마다 자동으로 갱신하는 polling 방식을 선택했습니다. 웹서핑 도중 polling이 쓰이는 여러 상황, 두 방식을 부르는 명칭을 발견해 명확히 알고 가면 좋을 것 같아 정리합니다.

     

    개념

    CPU에서 vs 통신에서 vs 웹에서

     

    polling

    CPU 
    - Polling은 특정 주기를 가지고 그 주기 마다 처리를 위한 시그널이 들어 왔는지를 체크 합니다. 따라서 커널과 같은 Interrupt Handler가 필요하지 않습니다. 해당 드라이버에서 스레드를 돌면서 주기적으로 체크만 하면 되기 때문입니다. 
    그래서 Interrupt 방식보다 구현이 쉽습니다. 하지만 시스템의 리소스를 많이 먹는 부분에 구현시 시스템 성능 저하의 원인이 되기도 합니다. 또한 처리에 정확한 타이밍을 요하는 곳에 사용을 할 경우, 이 또한 문제 발생의 원인이 되기도 합니다.

    네트워크

    - 폴링(polling)이란 하나의 장치(또는 프로그램)가 충돌 회피 또는 동기화 처리 등을 목적으로 다른 장치(또는 프로그램)의 상태를 주기적으로 검사하여 일정한 조건을 만족할 때 송수신 등의 자료처리를 하는 방식을 말한다. 이 방식은 버스, 멀티포인트 형태와 같이 여러 개의 장치가 동일 회선을 사용하는 상황에서 주로 사용된다. 서버의 제어 장치(또는 프로그램)는 순차적으로 각 단말 장치(또는 프로그램)에 회선을 사용하기 원하는지를 물어본다. - 위키백과

    - 통신에서, "폴링"은 한 프로그램이나 장치에서 다른 프로그램이나 장치들이 어떤 상태에 있는지를 지속적으로 체크하는 전송제어 방식으로서, 대체로 그들이 아직도 접속되어 있는 지와 데이터 전송을 원하는지 등을 확인한다.
    명확히 말하면, 여러 개의 장치가 동일 회선을 공유하는 멀티드롭이나 멀티포인트 통신에서, 제어 장치는 각 장치에 한번에 하나씩 메시지를 보내어, 전송할 데이터가 있는지(즉, 회선을 사용하기 원하는지)를 묻는다.

     

    웹에서

    - 브라우저가 일정한 주기로 HTTP 요청을 보내는 방식입니다.
    보통 실시간 데이터의 업데이트 주기는 예측하기 어려우므로, 그에 따른 불필요한 서버 및 네트웍 부하가 늘어납니다.
    즉, 불필요한 서버 요청이 다수 생긴다는 말입니다. 주로 ajax call을 통해 요청합니다.

     

    interrupt

    - Interrupt 방식은 하드웨어에서 지정한 시그널을 받도록 구현하는 방식입니다.
    - 커널의 Interrupt Handler가 Interrupt를 체크하고, Interrupt 발생시 Interrupt Thread(해당 드라이버)로 Interrupt 발생을
    알려 줍니다. 따라서 Polling보다 다소 구현이 복잡합니다.
    - 하지만 처리의 정확한 타이밍을 요하는 드라이버에 적합하고 드라이버에서는 Interrupt 발생 이벤트가 들어
    올때만 처리를 하기 때문에 시스템에 부하를 줄일수 있습니다

    응용

    long polling

    - HTTP 요청 시 서버는 해당 요청을 일정 시간 동안 대기 시킵니다. 만약, 대기 시간 안에 데이터가 업데이트되었다면, 그 즉시 클라이언트에게 응답을 보내고 전달받은 데이터를 처리 후 서버로 재요청을 시작합니다.

    - 데이터 업데이트가 빈번한 경우엔 폴링에 비해 성능상 이점이 크지 않습니다.

    스트리밍(Streaming) 방식

    - 서버는 지속적인 업데이트를 위해 무한정(또는 일정 시간 동안) 요청을 대기시키며, "chunked" 기반 메시지를 이용하여 응답 시 연결을 유지 시킵니다.

     

    예시

    polling

    ex) 실시간으로 변하는 야구중계 같은 데이터가 있다면 브라우저에서 5초 단위로 서버에 요청을 보내 업데이트하는 방식(네이버 실시간 문자중계 같은거?)

     

    출처

    https://skmagic.tistory.com/271

    https://mohwaproject.tistory.com/entry/%E3%85%81%E3%85%81%E3%85%8

    http://recipes.egloos.com/5092826

    https://wondongho.tistory.com/69

    spring websocket (polling, Handshake 과정, sockjs, webSocketHandler, 예제) 출처: https://sjh836.tistory.com/166 [빨간색코딩]

     

     

Designed by Tistory.