poll에서 CPU를 100%먹는데 도데체 무슨 문제가??

mastercho의 이미지

프로그래밍상 문제는 없고요

gdb로 끝까지 추적해 봤는데

poll 부분에서 CPU를 엄청 먹네요

타임 아웃은 10으로 잡아줬고요

처음에는 괜찬은데... 몇번 자료를 주고 받다보면

처음할때는 안그러더니만 poll부분에서 엄청 CPU를 먹어되네요

[자료 1-2번 왔다갔다 하다가
순간적으로 그렇게 100%가 됩니다 1-2%먹던게...]

유저는 물론 2명 --;이고요

그냥 poll에서 timeout으로 왔다 갔다 로만 100% 먹는 기이한

현상이 벌어지고 있습니다

제 상식으로는 이해가 되질 않습니다 T_T

어찌된일일까요?

VMWare에서 돌려서 그런걸까요?

리눅스 버전은 한컴 리눅스3.0이고요

서지훈의 이미지

그렇다면 poll 보단는 select를 사용하시는게 좋지 않을까요?
원래가 poll이라는 놈이 아무리 좋더라도 select 보다도 더 자원을 소모할거 같은데...-_-ㅋ

제가 어떤 은사님으로 부터 들은 poll과 select의 차이점을 말하자면...

Quote:
밥집에서 우산을 가지고 밥을 먹을 때...
우산이 있나 없나를 매번 한 숟가락 마다 확인하는 모드가 poll 모드이고...
다 먹고 나서 아님... 가게를 나갈 때 우산을 확인하고 가지고 나가는게 select 모드...

이렇게 얘기를 듣고 나니깐 poll algorithm을 사용하기가 영...-_-ㅋ

피치 못할 사정이 아니면 select로 바꿔 보시는게...

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

mastercho의 이미지

이런 ~

당연히 문제가 없는줄 알았던 다른 쓰레드쪽에 문제가 있었네요

거기서 황당한 무한 루프가 있엇습니다 --;

이런 죄송~

부끄럽네요 :oops:

승자는 자기보다 우월한 사람을 보면 존경심을 갖고 그로부터 배울 점을 찾지만 패자는 자기보다 우월한 사람을 만나면 질투심을 갖고 어디 구멍난 곳이 없는지 찾는다.
- 하비스

errai의 이미지

poll에는 문제가 없습니다. 오히려 poll()이 select()보다 CPU 점유율을
적게 사용합니다. 리눅스나 Solaris같은 OS에서는 select()가 poll() 로
래핑 되어 구현되어 있다고 들었습니다. 실제로 커널에서 select system call
소스를 확인해보시면 내부에는 sys_poll()을 호출 하는 것을 볼 수 있습니다.

아마도 프로그램내에 다른 문제가 있을 것 같습니다.

펑키의 이미지

혹시 그 반대 아닌가요.?

SELECT의 경우 디스크립터의 처음부터 끝(보통 MAX DESCRIPTOR)까지 확인을 하게 되고 POLL의 경우 발생된 이벤트(디스크립터)부분만 확인하는 것 말입니다. 오히려 POLL이 SELECT보다 효율적인 프로그래밍이 가능할것 같아서요.

지나가다 혹시나 해서요..

CPU 100의 경우 SELECT나 POLL을 쓰던 보통 무한 루프를 돌게 되는데 디스크립터 체크 부분보다는 그 안쪽에서 무한루프를 돌거나 IF STATEMENT문에서 조건에 걸리지 않는 부분에서 많이 발생했던것 같습니다. 제 경우에는요. 헤헤~!.. 디폴트 없는 SWITCH 그리고 ELSE 없는 IF문에 FOR나 WHILE의 무한 루프안에 자주 돌드라구요. 제가 만들때는요. 에휴 바보...

즐거운 하루 되세요.

mastercho의 이미지

select는.....poll보다 인터페이스나 편리성이 떨어지는거 같더라고요

아무리 연구해봐도....

랩퍼 클래스로 라이브러리화 하기도 poll이 더 편하고요 :D

저도 select는 poll 구현되었다고 들은거 같습니다만은 ...

승자는 자기보다 우월한 사람을 보면 존경심을 갖고 그로부터 배울 점을 찾지만 패자는 자기보다 우월한 사람을 만나면 질투심을 갖고 어디 구멍난 곳이 없는지 찾는다.
- 하비스

펑키의 이미지

이참에 빌붙어서 더불어 궁금한게 생겼는데 혹시 kqueue linux는 어떻게 진행되는지 아시는분 계시나요.? 누워있다가 다시 컴터키구 일어났네요. 갑자기 궁금해져가지구요.

여담 술마시는 일찍 자야 하는데 이노무 술버릇은 꼭 잠않자구 이상한짓 한데니깐요. 아 늘그니깐 정말..... 통일전망대 갔다가 카트 타는 초등학생들 보구 어찌나 부럽던지.....

mastercho의 이미지

kqueue가 리눅스 커널에 포함되는지요??

아니 예정인지?

승자는 자기보다 우월한 사람을 보면 존경심을 갖고 그로부터 배울 점을 찾지만 패자는 자기보다 우월한 사람을 만나면 질투심을 갖고 어디 구멍난 곳이 없는지 찾는다.
- 하비스

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.