리눅스에서 윈도의 IOCP 과 유사한 소켓 프로그래밍 모델은?

ontow의 이미지

윈도 IOCP의 구조를 보면 굉장히 심플하며
커널레벨에서 처리하므로 속도 또한 빠르다고 생각됩니다.
리눅스에서는 이런 구조의 소켓 프로그래밍 모델이 있나요?

sylphong의 이미지

작동방식은 약간 다르지만 기본적인 원리는 비슷한 epoll이 있습니다..
솔라리스의 /dev/poll을 리눅스로 포팅한것으로써 사용할려면 2.4대에서는 패치를해야되며 2.5최신개발버젼에는 포함되어있습니다..
그외 BSD에선 kqueue라는걸씁니다..

ontow의 이미지

정말 큰 도움이 되었습니다.

stoneshim의 이미지

비슷한 질문에 대한 답변인데 한번 읽어보시면 도움이 될것 같습니다.

http://bbs.kldp.org/viewtopic.php?t=4411&highlight=kqueue

우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자

choissi의 이미지

Quote:
작동방식은 약간 다르지만 기본적인 원리는 비슷한 epoll이 있습니다..

음.. iocp와 (/dev/poll, kqueue)는 완전히 다른 계념이지요..

iocp의 핵심은 비동기 입출력후에 통지를 가능하게 해주는 것인데
poll이나 kqueue는 select 처럼 멀티 플렉싱을 어떻게 효율적으로
하느냐의 개선안이지 iocp와는 다르다고 봅니다.

리눅스에서 iocp처럼 되는 모델은 존재하지 않구요

imb 쪽에서 nt와 비슷한 iocp를 본적이 있습니다.
http://publib.boulder.ibm.com/iseries/v5r1/ic2924/info/rzab6/rzab6asynchi0.htm

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

aero의 이미지

POSIX AIO(Asynchronous I/O) 가 그런 비동기 I/O를 구현하는것으로 보입니다.

http://www.linux.ericsson.ca/ocg/Frederic_Rossi_Asynch_Event_Mech.pdf
http://www.linux.ericsson.ca/aem/
위의 문서와 싸이트를 참고하세요

아래는 위 문서에서 따온글
Existing asynchronous mechanisms

Microsoft I/O completion port (IOCP):
→Not Linux !!

POSIX Asynchronous I/O (AIO):
→Not yet supported on Linux, not fully supported by other Unix!
→Problems:
•Event completion is not transparent,
•Restricted to stream descriptors,
•Scalability,
•Soft real-time

shkwon81의 이미지

올려 주신 자료들 요긴하게 참고하도록 하겠습니다 ^^

KLDP Q&A 게시판이 개발자 분들 수준이 아주 높으신 것 같습니다..

skjk의 이미지

윈도우에서는 Overlapped I/O로 asynchronous I/O가 가능하고 IOCP를 통해 효율적이고 간단한 Thread Pooling이 가능합니다.

윈2000이상에 있는 BindIOCompletionCallback API를 쓰면 Thread Pooling 관리까지 자체 heuristic을 통해 해줍니다;;

POSIX.4의 aio나 kqueue나 epoll등으로 I/O처리까지는 효율적으로 할 수 있는 것 같은데요 그 후에 Thread Pooling을 통한 처리는 보통 어떻게 하나요?

choissi의 이미지

흐흐 없으면 만들어서 써야겠죠.
오렐리 쓰레드 책 내용중에 tpool소스가 있는데
그거 적당히 수정해서 사용중인데 괜찮은거 같습니다.

책소개 & 예제파일
http://www.ezdoum.com/stories.php?story=02/05/09/0348890

하지만 직접 만들어 쓴다면 닷넷의 쓰레드 풀을 참고 하겠습니다.

닷넷에서 제공하는 쓰레드 풀의 인터페이스가 깔끔하더군요
그걸 흉내내서 구현해도 좋을듯 합니다.
(쓰레드 관련 컨디션처리나 잠금 관련도 깔끔했습니다.)

울랄라~ 호기심 천국~!!
http://www.ezdoum.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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.