IPC 선택의 기준..

낙엽의 이미지

프로젝트를 뛰다보면 여러 프로세스가 한 데이타에 접근해야 할 경우가 많은것이 대부분입니다.

보통 message queue나 shared memory를 많이 사용하는 편인데요..
(FIFO나 다른 IPC method들은 아직 실제 프로젝트에 적용한 경험은 없어서.. 여기서는 질문에 포함 안했습니다..)

그냥 일반적으로 가지고 있는 지식만 가지고서는 효율성을 따지기 힘들더군요.
(그냥 대략 알고있기로 shared memory가 message queue보다 속도면에서는 빠르고, message queue는 동기화 시켜줄 필요가 없어서 사용하기는 편하다고만 느끼고 있었습니다만..)

여러분들은 어떨때 shared memory를 사용하시고, 또 어떨때 message queue를 사용하시나요?

seeker의 이미지

메시지 큐는 스티븐스책에 보면
가장 속도가 느리다고 나오고
사용하지 말아야한다는 비추천글을 본것같습니다.

짧은 실무경력으로는
메시지큐는 사용되는걸 못보았는데요.
사실 메시지큐가 사용하기는 편한것같은데..
제 의견일뿐입니다.

역시. 다른분의 의견을 듣고 싶군요.

sunyzero의 이미지

MSG Q는 휘발성입니다. 따라서 그냥 큐일 뿐이죠.

SHM은 휘발성이 아니라 메모리 공간인데 특수하게 여러 프로세스가 접근가능하다는 특징일 뿐이죠.

따라서 데이터가 날라와서 처리하는 버퍼적인 용도로 사용한다면 MSG Q가 정답이고(물론 다른 기법도 사용할수는 있습니다), 어떤 데이터를 여러 프로세스가 공통적으로 사용한다면, 그리고 그 변화나 그런것들을 공유해야 한다면 SHM 을 쓰는게 맞겠죠. 한가지 더 SHM을 동기화 하기 위해서는 세마포어를 쓰기도 합니다.

PS)메시지 큐도 많이 사용합니다. ^^*

========================================
* The truth will set you free.

vigor96의 이미지

UNP 2권 보고 정리하세요.^^

xjiwoox의 이미지

Shared Memory는 프로세스의 주소공간에 매핑되기 때문에 속도는 가장 빠르지만 동기화 처리라던가 순차적으로 들어오는 데이터에 대한 Queuing 등은 직접 구현해줘야 하기 때문에 번거롭죠.(게다가 Queuing이라던가 동기화, 우선순위 처리 등을 구현해주다 보면 Message Queue와 별반 속도차이도 없습니다.)

Message Queue는 따로 동기화 처리가 필요없고 자동적으로 데이터를 Queuing하기 때문에 쓰기는 편하지만 역시 Shared Memory에 비해 속도는 느립니다.

IPC의 이름 그대로 공유데이터를 단순히 Sharing할 경우라면 Shared Memory + Semaphore, 프로세스간 자료전송을 위한 경우라면 Message Queue를 사용하시면 됩니다.

s(˘∼˘*)z,·´″"`°³о$ √(´∀`√)... (˘ヘ˘ㆀ)a

dondek의 이미지

그렇다면 메세지 큐의 크기는 얼마나 됩니까?

그리고 메세지 큐의 크기를 늘릴수 있다면 어떤 방법이 있는 건지요?

진리를 나의 수준으로 끌어내리지 마라.
나를 진리의 수준으로 끌어올려라. - 배꼽 중에서

xjiwoox의 이미지

메세지큐의 크기나 블럭의 제한은 시스템마다 다릅니다.
(관리자가 제한을 변경할 수 있습니다.)

s(˘∼˘*)z,·´″"`°³о$ √(´∀`√)... (˘ヘ˘ㆀ)a

datamind의 이미지

/proc/sys/kernel 에 있습니다.

댓글 달기

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