Level Trigger와 Edge Trigger 에 대한 설명좀 부탁 드립니다...

kpserv의 이미지

epoll 을 보면 Level Trigger와 Edge Trigger 에 대해서 나오는데요...
(아마도 c10k 문서에서도 나왔던것 같습니다)

정확히 이게 무엇인가요??
epoll의 level, edge trigger 에 대한 설명도 좋지만...
원론적인 설명을 좀 부탁드립니다..

s4bz의 이미지

level trigger는 0(혹은 1)일때 실행(?)되는것이고,

edge trigger는 positive edge(0 -> 1 바뀌는 경우)나

negative edge(1 -> 0 바뀌는 경우)때 실행됨을 말하는것 같네요.

이상 허접 답변이었습니다.
(위의 답변이 정확한지는 장담을 ㅈㅅ;;)

아~~

grassman의 이미지

epoll에 대해서는 제가 아는 바가 없어서 설명드리기 힘들군요.

epoll이 아닌 일반적인 신호에 대한 기준에서 볼때는 edge는 신호의 레벨이 바뀌는 지점을 의미합니다. 반면 level은 말 그대로 신호의 level을 의미합니다. 어떤 신호가 특정 level에 있을때 항상 event가 발생하게 하려면 Level Trigger를 사용합니다. 반면 신호의 변화가 있을 때만 event가 발생하게 하려면 Edge Trigger를 사용합니다.

전기 신호를 예로 든다면 High, Low를 각각 1, 0으로 표시했을 때 0->1, 또는 1->0으로 바뀌는 순간에 대한 포착은 Edge Trigger를 사용할 수 있으며 0->1로 가는 경우를 Rising Edge라고 부릅니다. 반대의 경우는 Falling Edge라고 합니다. 반면 0이나 1인 경우를 계속 잡아내고 싶다면 Level Trigger를 사용합니다. 0일 때 event가 발생하는 경우를 Active Low라고 하고 1일 때 event가 발생하는 경우는 Active High라고 합니다.

hie의 이미지

epoll에 대해서는 제가 아는 바가 없어서 설명드리기 힘들군요.
 
epoll이 아닌 일반적인 신호에 대한 기준에서 볼때는 edge는 신호의 레벨이 바뀌는 지점을 의미합니다. 반면 level은 말 그대로 신호의 level을 의미합니다. 어떤 신호가 특정 level에 있을때 항상 event가 발생하게 하려면 Level Trigger를 사용합니다. 반면 신호의 변화가 있을 때만 event가 발생하게 하려면 Edge Trigger를 사용합니다. 
 
전기 신호를 예로 든다면 High, Low를 각각 1, 0으로 표시했을 때 0->1, 또는 1->0으로 바뀌는 순간에 대한 포착은 Edge Trigger를 사용할 수 있으며 0->1로 가는 경우를 Rising Edge라고 부릅니다. 반대의 경우는 Falling Edge라고 합니다. 반면 0이나 1인 경우를 계속 잡아내고 싶다면 Level Trigger를 사용합니다. 0일 때 event가 발생하는 경우를 Active Low라고 하고 1일 때 event가 발생하는 경우는 Active High라고 합니다

아주 정확하게 설명을 해 주셨기 때문에 저는 I/O 멀티플렉싱 관점에서 설명을 드리도록 하겠습니다.
레벨트리거와 에지 트리거를 소켓 버퍼에 대응하면, 소켓 버퍼의 레벨 즉 데이터의 존재 유무를 가지고 판단하는 것이
레벨트리거 입니다. 즉 읽어서 해당 처리를 하였다 하더라도 덜 읽었으면 계속 이벤트가 발생하겠지요. 예를 들어
1000바이트가 도착했는데 600바이트만 읽었다면 레벨 트리거에서는 계속 이벤트를 발생시킵니다. 그러나
에지트리거에서는 600바이트만 읽었다 하더라도 더 이상 이벤트가 발생하지 않습니다. 왜냐하면 읽은 시점을 기준으로
보면 더이상의 상태 변화가 없기 때문이죠.. LT 또는 ET는 쉽게 옵션으로 설정 가능합니다.

참고로 select/poll은 레벨트리거만 지원합니다.

hie의 이미지

epoll에 대해서는 제가 아는 바가 없어서 설명드리기 힘들군요.
 
epoll이 아닌 일반적인 신호에 대한 기준에서 볼때는 edge는 신호의 레벨이 바뀌는 지점을 의미합니다. 반면 level은 말 그대로 신호의 level을 의미합니다. 어떤 신호가 특정 level에 있을때 항상 event가 발생하게 하려면 Level Trigger를 사용합니다. 반면 신호의 변화가 있을 때만 event가 발생하게 하려면 Edge Trigger를 사용합니다. 
 
전기 신호를 예로 든다면 High, Low를 각각 1, 0으로 표시했을 때 0->1, 또는 1->0으로 바뀌는 순간에 대한 포착은 Edge Trigger를 사용할 수 있으며 0->1로 가는 경우를 Rising Edge라고 부릅니다. 반대의 경우는 Falling Edge라고 합니다. 반면 0이나 1인 경우를 계속 잡아내고 싶다면 Level Trigger를 사용합니다. 0일 때 event가 발생하는 경우를 Active Low라고 하고 1일 때 event가 발생하는 경우는 Active High라고 합니다

아주 정확하게 설명을 해 주셨기 때문에 저는 I/O 멀티플렉싱 관점에서 설명을 드리도록 하겠습니다.
레벨트리거와 에지 트리거를 소켓 버퍼에 대응하면, 소켓 버퍼의 레벨 즉 데이터의 존재 유무를 가지고 판단하는 것이
레벨트리거 입니다. 즉 읽어서 해당 처리를 하였다 하더라도 덜 읽었으면 계속 이벤트가 발생하겠지요. 예를 들어
1000바이트가 도착했는데 600바이트만 읽었다면 레벨 트리거에서는 계속 이벤트를 발생시킵니다. 그러나
에지트리거에서는 600바이트만 읽었다 하더라도 더 이상 이벤트가 발생하지 않습니다. 왜냐하면 읽은 시점을 기준으로
보면 더이상의 상태 변화가 없기 때문이죠.. LT 또는 ET는 쉽게 옵션으로 설정 가능합니다.

참고로 select/poll은 레벨트리거만 지원합니다.

익명 사용자의 이미지

답변주신분들 감사드립니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.