thread pool 질문..

psjcap의 이미지

pthread를 이용해서 thread pool을 만들었습니다..
mutex, condition variable을 이용해서 queue를 만들고..
queue가 full상태이거나 empty상태일 경우에 enqueue, dequeue 시도시 블록되게 하였습니다..

즉 queue에 thread들이 대기하고 있다가 queue로 메세지가 들어오면 한 thread가 그 메세지를 처리하고 나머진 다시 block되게 작성을 하였습니다..

그런데 이 thread pool 크기를 늘리기도 하고 줄이기도 하려고 합니다..
문제는.. queue에서 메세지가 오길 기다리고 있는 thread를 cancel 처리 부분이 무지 까다롭군요..

즉 블록시켜 놓고.. cancel 된다거나 하는 문제입니다..
pthread_cleanup_push, pthread_cleanup_pop으로..
일단 unlock 해 놓고 볼까도 생각해 보았지만..
오히려 문제가 더 많이 생길것 같더군요..

혹시 이런 식으로 구현하여 보신 분이나..
다른 좋은 방법이 있으면 조언 부탁드립니다..

그럼 좋은 하루 되셔요..^^"

sozu의 이미지

Queue로 하는것 보다는 Stack으로 하심이

Locality에 더 이롭지 않을까 라는 생각을 합니다^^

에궁 딴소리를 해버렸네요;;

사실 아래의 내용이 이해가 않가요( ..)

psjcap wrote:

문제는.. queue에서 메세지가 오길 기다리고 있는 thread를 cancel 처리 부분이 무지 까다롭군요..

cancel 처리 부분이란게 이해가 않데요..ToT

제가 머리가 나빠서..ToT

-----------
청하가 제안하는 소프트웨어 엔지니어로써 재미있게 사는 법
http://sozu.tistory.com

choissi의 이미지

psjcap wrote:
즉 queue에 thread들이 대기하고 있다가 queue로 메세지가 들어오면 한 thread가 그 메세지를 처리하고 나머진 다시 block되게 작성을 하였습니다..

그런데 이 thread pool 크기를 늘리기도 하고 줄이기도 하려고 합니다..
문제는.. queue에서 메세지가 오길 기다리고 있는 thread를 cancel 처리 부분이 무지 까다롭군요..

작업 양(큐에 쌓이는 양)을 모니터링 하다가 쓰레드를 줄여겠다
싶으면, 종료를 뜻하는 작업을 넣어 주는 구조는 어떨까요?

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

leilei의 이미지

choissi wrote:
작업 양(큐에 쌓이는 양)을 모니터링 하다가 쓰레드를 줄여겠다
싶으면, 종료를 뜻하는 작업을 넣어 주는 구조는 어떨까요?

오호~ :)
멋쩌요~~

psjcap의 이미지

밤새도록 고민해서.. 위와 같은 방법이 아니라..
다른 방법을 생각해 내었습니다..

쓰레드 풀 설계에 관련되어서 지식이 워낙 부족한터라..ㅠㅠ

일단 큐를 두개 만들고..
하나의 큐는 일이 없는 쓰레드들..
하나의 큐는 일을 하고 있는 쓰레드들을 넣어 둡니다..

그래서 데이타가 들어오면 놀고 있는 쓰레드에서 하날 꺼내서..
작업을 시키고.. 일을 하고 있는 큐에 넣어두고..
일이 끝나면 그 쓰레드는 다시 놀고 있는 쓰레드가 들어있는 큐로 다시 들어가는 방식을 생각했습니다..

그래서 쓰레드 양을 조절할 때는 놀고 있는 쓰레드 큐에서 쓰레드를 꺼내서 cancel 시키는 방법이지요..

보통 어떤 식으로 구현을 하시는지 생각할 수록 더더욱 궁금해 지네요..
그럼 많은 조언 부탁드립니다...^__^"

댓글 달기

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