Socket Pool?

purewell의 이미지

소켓을 하나 생성할 때마다 내부에서 그 소켓을 관리할 메모리를 할당받죠.
이것이 초당 몇 건 안 되면 그려려니 하겠지만 초당 몇 백 건 되면 할당/해체 하니라 서버가 죽어나겠죠?
그래서 소켓풀이 있으면 좋겠다...라는 생각이 듭니다.

클라이언트쪽에선 논리상으론 될 것 같아 보였습니다.

풀초기화(socket함수 왕창 부른다) -> 풀에서 소켓 요청 -> connect -> send/recv -> shutdown -> 풀에 소켓 반환

이렇게 말이죠...

그런데 서버쪽에선 @ ,.@) accept 안에서 socket에서 했던 작업을 해버리는 관계로 할 수가 없지요. (안타까운 현실이 아닐 수 없습니다)

어떻게 안 될까요? 대한민국에 안 되는게 없을텐데 말이죠.

Windows에선 AcceptEx/ConnectEx 라는 녀석이 있군요.

nomoreid의 이미지

제경험상 수천대의 client의 accept를 처리해도 커널영역에서 메모리 할당하느라 느려지거나 하는 경우는 없었습니다.^^;; (fedora core나 cent os에서 수천개씩 accept하는 테스트 해봤습니다. 부하없이 잘됩니다. ^^;;)

네트웍과 파일시스템쪽 소스를 뜯어봐야 겠지만 커널 내부에서 쓰는 데이터는 Cashing 하는것으로 알구 있고요. 대신 User Program 영역에서 사용 하는 client Data는 pooling 하셔야 합니다. 오히려 이부분처리가 잘못되서 랙을 유발시키는 경우가 많더군요.

그리고 epoll을 쓰면 socket event가 발생시 User program영역의 client data를 매치 시키는데 편하게 사용 할 수 있습니다. 안그러면 socket id와 client 자료구조를 hash map등으로 찾아줘야겠죠. ^^;;;

Never Ending 삽질.

kewlbear의 이미지

서버 프로그램의 경우 accept 등의 처리에 부하가 걸리는 것이 아니라 해당 소켓을 처리하기 위한 쓰레드나 프로세스를 만드는 데 부하가 많이 걸립니다. 그래서 쓰레드나 프로세스를 미리 만들어서 풀링을 하는 경우가 많습니다. 자세한 구현방법 등은 UNP를 참고하세요.

댓글 달기

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