2017-10-07 20 views
2

EPOLLONESHOT이 지정된 경우 레벨 트리거 및 에지 트리거 모드의 차이점은 무엇입니까?epoll : EPOLLONESHOT이 지정된 경우 트리거 된 레벨과 에지 트리거 된 트리거의 차이

이미 비슷한 질문이 here입니다. "Crouching Kitten"의 대답은 옳지 않은 것 같습니다. (이해할 수있는 한 다른 대답은 내 질문에 답하지 않습니다.)

나는 다음 시도했다 : 클라이언트가 epoll_wait에서 epoll_wait

  • 클라이언트 수익률 기다리는 동안,

    • 서버가 클라이언트에 2 바이트를 전송 한 후 1 바이트를 읽습니다.
    • 클라이언트가 이벤트를 다시 처리합니다 (EPOLLONESHOT 때문에)
    • 고객은 epoll_wait을 다시 호출합니다. 여기, 두 경우 모두 (LT & ET)에 대한 epoll_wait 대기하지 않지만, ("웅크 리고 새끼"로 대답에 반대를) 즉시 반환
    • 클라이언트는 어떤 차이가 두 번째 바이트

    를 읽을 수 있습니다 LT & ET 사이, EPOLLONESHOT을 지정할 때?

  • +0

    위의 코드를 게시 할 수 있다면 좋을 것입니다. 나는 네가 네가 주장한 것을했다고 믿지만, 따라 오는 다음 사람에게 더 좋은 질문을 할 것이다. –

    +0

    @ShacharShemesh : 불행히도이 코드는 더 큰 프레임 워크의 일부입니다. 하지만, 나는 커널 소스 코드를 체크 아웃했는데, EPOLLONESHOT이 지정되면, 이해할 수 있듯이 LT와 ET 사이에는 아무런 차이가 없다. 나는 잠시 동안 기다릴 것이고, 아무 대답도 도착하지 않으면, 나는 내 자신의 질문에 대답 할 것이다. – geza

    +0

    저녁 식사와 함께 답변 작성을 중단하면 이런 일이 발생합니다. 사람들은 자신의 부재로 자신의 대답을 찾습니다 .-) –

    답변

    1

    결말 대답은 "차이가 없다"고 생각합니다.

    the code을 보면 fd가 원샷으로 비활성화되기 전에 마지막 세트 비트를 기억하는 것 같습니다. 그것은 그것이 한 발의 탄이었던 것을 기억하고 그것이 ET인지 아닌지를 기억합니다.

    fd가 수정 될 때까지 비활성화되어 있고 다음에 EPOLL_CTL_MOD을 호출하면이 모든 것이 지워지고 새 MOD가 말하는 모든 것으로 바뀝니다.

    누군가가 왜 EPOLLETEPOLLONESHOT을 모두 원하는지 이해할 수 없습니다. 나에게, EPOLLET의 요점은, 특정 프로그래밍 모델 (즉, 마이크로 스레드)을 줄이고, 그것은 퍼미 멘 테이션을 따르는 것이다. 즉, 처음에는 epoll에 fd를 추가 할 수 있고 다른 epoll 관련 시스템 호출을 수행 할 필요가 없습니다.

    EPOLLONESHOT은 fd가 감시되는 시간과 그렇지 않은 시간을 매우 엄격하게 제어하려는 사람들이 사용합니다. 이것은 정의상으로 EPOLLET이 사용되는 것과 반대입니다. 두 개가 개념적으로 호환 가능하다고 생각하지 않습니다.

    +0

    이것으로 무엇을 의미합니까? "이것은 처음 시작할 때 epoll에 fd를 추가 할 수 있고 다른 epoll 관련 시스템 호출을 수행 할 필요가 없다는 것을 의미합니다."epoll_wait은 여전히 ​​호출 될 것입니다. 그렇지 않습니까? – geza

    +0

    더하기, ET + EXCLUSIVE의 의미를 갖지 않는 다른 조합이 있습니다. 이것에 대해 어떻게 생각하세요? – geza

    +0

    많은 경험이 없으십시오.필자가 읽었던 'EPOLLET'은 마이크로 쓰레딩에 유용하며 배타적 인 쓰레기와 온세트는 멀티 쓰레딩에 유용합니다. 따라서, 나는 당신이 그것을 사용하고 싶을 때까지 내재 된 마찰이 없다고 생각합니다. –