Thread Idle

kimsk99의 이미지

Solaris에서 pthread를 이용해서 multithread programming을 하고 있습니다.

수행해야할 작업이 없어서 잠시동안 thread를 idle시켜야 할 때 어떻게 해야 할까요?

여러가지 방법을 찾아 봤지만 명확한 방법을 찾지 못했습니다.

제가 찾아본 방법과 그것에 따른 문제점을 정리해 보면 다음과 같습니다.

1. sleep(int)
sleep시간을 0으로 넣으면 idle상태가 존재하지 않고 CPU를 100%점유하고, 1초씩 시간을 넣으면 대기 시간이 많아져서 reponse에 문제가 따라서 포기.

2. usleep(int)
multithread safe function이 아니라서 포기.

3. pthread_yield
CPU를 100% 먹는 문제로 포기. (거의 sleep(0)과 같은 결과를 보입니다.)

뭔가 좋은 방법이 없을 까요?

choissi의 이미지

아래글 중간쯤에 보면 null을 select에 주어서 지연 시키는것이 있는데
이것으로 구현해 보심이..;;

http://bbs.kldp.org/viewtopic.php?t=21105&highlight=sleep+%B1%B8%C7%F6

울랄라~ 호기심 천국~!!
http://www.ezdoum.com

김성진의 이미지

위의 분 말씀처럼 select를 쓰시는게 가장 무난할 듯 싶습니다.

50~300 uSec 정도의 범위로 놓고 select를 호출하시면,

어느정도 CPU점유량이 감소하는 것을 확인하실 수있습니다.

이 값은 설치된 CPU의 파워하고, 해당 쓰레드가 일을 수행하게되는

양과의 관계를 적절하게 튜닝해서 설정하셔야 할 것 같습니다.

저의 경우에는 Minimum sleep과 Maximum sleep 값을 미리

고정시켜놓고, Load가 많을 경우 sleep을 줄이고,

Load가 적을 경우 sleep 시간을 늘려서

서비스 요구에 대해 어느정도 적응을 시키고 있습니다.

플랫폼 마다 사용하는 select 시스템 콜이 사용하는

CPU의 점유율도 각기 다르기 때문에

신중히 값을 결정하셔야 할 것 같습니다.

그럼 이만.

김성진 드림

PS) 경험상 HP가 가장 많은 CPU를 사용하더군요. -_-;;
(괜히 관계되는 분께 욕먹는게 아닌지....)

고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.

kimsk99의 이미지

null select이 가능하군요..

답변에 감사드립니다.

댓글 달기

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