쓰레드프로그램에 관한 질문

linuxs의 이미지

안녕하세요
쓰래드 라이브러리를 이용해서 프로그램을 개발하고 있는데 궁금하게 있어서 글 올립니다.
먼제 mutex를 이용해서 데이타를 쓰래드간 보호하는걸로 알고 있습니다.
여기서 말하는 데이타란 전역으로 선언된 데이타가 맞나요?(당연한건가^^)
그리고 4개의 쓰래드를 생성해서 각각 쓰래드가 서로 다른 서버로 접속해서 이미지 데이타를 가져와서 디스플레이 하는 걸 만들고 있는데 프로세스 점유율을 4개의 쓰레드 모두 같도록하고 싶은데 어떻게 구현해야 될지 모르겠네요..
그냥 4개 쓰레드 생성해서 돌렸더니 4개중 1넘은 잘 나오다가 3넘은 엄청 느게게 나옵니다. 그래서 4개의 쓰래드가 수행할 수 있는 시간을 같도록하고 싶습니다.
mutex를 이용해서 구현해야 돼나여?

조언 부탁드립니다.

lkjt의 이미지

질문과 좀 다르지만.

네트워크를 이용하신다면,,,

쓰레드는 20개정도가 좋던데 전,,,

소스 퍼오는건 속도가 꾀 걸리는데 인터넷 전송을 100% 활용안하더군요.

그래서 20개 정도 로 올리니

1개당 약 10배의 속도 향상을 보엿습니다. (M$ 윈도우 환경)

sodomau의 이미지

mutex는
쓰레드간에 동시에 액세스할 수 있는 데이터
(일반적으로 전역 데이터)를 보호하기 위한
방법이지 동기화를 위한 건 아닐텐데요.
잘은 모르겠지만, 굳이 일부러 점유율을 맞춰주지 않아도
같은 작업을 하는 쓰레드라면 길게 봤을 때
점유율이 비슷하지 않나요..?

lkjt의 이미지

sodomau wrote:
mutex는
쓰레드간에 동시에 액세스할 수 있는 데이터
(일반적으로 전역 데이터)를 보호하기 위한
방법이지 동기화를 위한 건 아닐텐데요.
잘은 모르겠지만, 굳이 일부러 점유율을 맞춰주지 않아도
같은 작업을 하는 쓰레드라면 길게 봤을 때
점유율이 비슷하지 않나요..?

맞죠.

어짜피 다른게 점유율을 많이 먹는다고 해도,

join을 하면서 기다리면 다른게 올라가고 이런식으로.

비슷비슷하게 돌아가지 않나요?

mastercho의 이미지

sodomau wrote:
mutex는
쓰레드간에 동시에 액세스할 수 있는 데이터
(일반적으로 전역 데이터)를 보호하기 위한
방법이지 동기화를 위한 건 아닐텐데요.
잘은 모르겠지만, 굳이 일부러 점유율을 맞춰주지 않아도
같은 작업을 하는 쓰레드라면 길게 봤을 때
점유율이 비슷하지 않나요..?

동기화 개념이 맞습니다

실례로 자바의 synchronized 라는 키워드로 뮤텍스의 역활을 수행하고 있습니다

한컴 사전 wrote:

synchronized의 뜻은

〖컴퓨터〗 동기(화)(同期(化))(동기 신호를 시계 뛰놀이(clock pul
se)의 타이밍에 맞춤).

게다가 모든 OS 책 및 시스템 프로그래밍 책에서 상호배제에를 위해 동기화 기법을 쓴다고 합니다 . 동기화라는 이미 표준용어입니다

동기화에 대해 오해 하고 게시는거 같네요

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

sozu의 이미지

제가 질문을 잘 이해했는지 모르겠지만

동기화를 통한 스케쥴링을 해주면 좋을 것 같습니다.

즉, 서로 다른 일을 하는 스레드 간의 중계 역할을 하는 스레드가 필요하겠죠

또한 CPU 점유율에 대한 Estimation도 알아보셔야 할듯 합니다.

그리고 mutex는 주로 스레드 간의 동기화를 위한 Kernel Object 아닌가요.

Critical Section에 대한 Mutual Exclusion은 곧 Synchronization을

위해서겠지요.

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

댓글 달기

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