다중연결서버를 만들려구하는데여

jjjjrr의 이미지

안녕하세요
다중연결서버를 만들려구하는데여
fork를 이용해야될지
thread를 이용해야될지를 몰라서 질문드립니다
포크를 사용하면 프로세스생성때문에 속도가 느리다고
하는데여 어느정도느린지....
그리구 프로세스생성갯수에도 제한이있다고 들었는데여
몇개까지가능한가요
저로서는 속도에서 문제가될것같은데
어느정도의 차이가나는지 궁금합니다
제가하려는작업은
클라이언트의 요청을 받고
어떤스크립트를 실행시켜 그결과를
클라이언트에 전송해주고 연결을 끊을려구합니다
프로세스생성갯수는 몇개까지가능한지는몰라도
그렇게 문제될것까지는 없겠는데
속도에서가 문제일것같읍니다
저같은경우에는 어떤방법을 사용해야옳을까요
조언부탁드립니다
즐거운하루되세요

alsong의 이미지

단일 프로세스의 select를 이용한 방법도 속도에 상당히 유리(경우에 따라 아닐수도)합니다.
위의 경우 select로 처리하기에는 조금 힘들겠군요(아닌 경우에 속하는것 같군요).

만약, fork나 thread를 사용하신다면... 미리 thread를 뛰어 놓으시고
받아서 처리하면 접속할 때마다 프로세스를 생성하는 시간을 줄일수 있습니다.
fork의 경우 각 프로세스의 정보를 공유해야될때 공유메모리를 사용해야하는 불편이 있습니다. 동기화가 필요할시 세마포어도 필요하게 되고요.

그나저나 백수 언제 탈출하냐... ㅡㅡ; 배고파라.

verena의 이미지

alsong wrote:
단일 프로세스의 select를 이용한 방법도 속도에 상당히 유리(경우에 따라 아닐수도)합니다.
위의 경우 select로 처리하기에는 조금 힘들겠군요(아닌 경우에 속하는것 같군요).

만약, fork나 thread를 사용하신다면... 미리 thread를 뛰어 놓으시고
받아서 처리하면 접속할 때마다 프로세스를 생성하는 시간을 줄일수 있습니다.
fork의 경우 각 프로세스의 정보를 공유해야될때 공유메모리를 사용해야하는 불편이 있습니다. 동기화가 필요할시 세마포어도 필요하게 되고요.

위의 님께서 말씀하신 내용과 관련된 단어로는. multiplexer, multiplexing, poller, thread pool이 있습니다.

해당 단어와 관련된 개념을 습득하신다면 훨씬 빠르게 이해 되시리라 봅니다.

ajoupark의 이미지

아파치 같이 pre-fork 된 몇개의 서버를 두고 세마포어나 파일 locking 을 사용하여 accept 를 경쟁적으로 처리하는 방식도 적용해 볼 수 있을 듯 하네요. 서버사이의 동기화 문제도 별로 없을 듯하고, pre fork 서버라서 속도문제도 없을 듯 하고요..

/** 주워 들은 것도 내 것이다. 많이 주워 들어야지*/

sjang의 이미지

pre-fork처리와 함께 pre-thread도 방법입니다.
처리를담당할 쓰레드를 미리 만들어 두는것이지요.
만들어둔 쓰레드 보다 동시 접속이 많다면 새로운 쓰레드를
만들면 됩니다.

pre-fork이든 pre-thread이든 미리 만들어져있기 때문에
메모리 사용을 제외하면 동작속도는 거의 차이 없습니다.

문제는 미리 만들어둔 것 이상의 숫자만큼 동시처리 요청이
생길 때 새롭게 생성해야 하는데 프로세서를 생성하느냐
쓰레드를 생성하느냐에 따라 속도가 달라지지요.

어느책에 보니 프로세서가 1 이라면 쓰레드는 0.7 정도라고 하더군요.
세상에 공짜는 없습니다. 30% 빠른 대신에 단위작업당
안정성 문제 발생시 차이가 나지요.
목적에 맞게 잘 사용하시기 바랍니다.

The Future !!!

charsyam의 이미지

IO 모델이라는게 속도에 큰 영향을 미치지만, 가장 중요한 것은 서비스 대상인원일껍니다. 10명 서비스 하는데, 뭐, async-IO 뭐, 이런걸 쓸 필요는 없겠죠.
그냥 무식하게 해도, 충분히 서비스 될껍니다. 그럼 고운 하루되시길...

ps. 만약 인원이 많아진다면야, 고급 io 방법을 아셔야 할껍니다.

=========================
CharSyam ^^ --- 고운 하루
=========================

댓글 달기

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