미디어 서버의 처리를 single thread로 구현하는 것에 대해 질문이 있습니다.

moon8011의 이미지

특정 미디어 데이타가 입력되면 그걸 프레임단위로 인디코딩을 거쳐 RTP 패킷으로 만들어

소켓을 이용하여 패킷망에 뿌리는 처리를 하는 daemon을 만들어야 하는데요.

multi thread 방식으로 요청이 올때마다 위의 처리를 해주는 thread를 생성하는 방법으로

하는 것은 알겠는데 이것을 single thread로 바꿔야 됩니다.

===============================================================================
multi thred 상에서는 다음과 같은 과정을 거칩니다.

1. daemon에게 해당 연결을 위한 요청메시지를 보내 key값을 얻어옵니다.

2. 얻어온 key를 이용하여 해당 연결에 대해 play 메시지를 보내면 daemon은 play를 처리할 thread를 생성합니다.

3. 이후에 pause, resume , stop과 같은 메시지를 key 이용하여 daemon에게 보내면 해당 key에 해당하는 연결의 play를

제어합니다.

play thread는 nomalizing -> decoding -> encoding -> framing -> send 의 순으로 처리를 하고 flag를 이용하여

pause, resume, stop과 같은 제어를 합니다.

이런 상황은 연결요청마다 play thread를 생성해주는 방법인데 이걸 single thread로 바꿔야 합니다.
=================================================================================================

요청이 올때마다 thread를 생성하는것이 아니라 하나의 play thread에서 모든 요청에 대한 처리를 수행해야합니다.

sigle thread에서 모든 요청을 다 수행해야 되는데 어떤 식으로 설계가 되야 되는지 감이

잡히지를 않습니다.

어떤 식으로 설계를 해야 하는지 도움 부탁드려요.

아는게 거의 없는지라 어떤 조언이라도 감사히 받을게요.

수고하세요.

shyblue의 이미지

리눅스라면 epoll을 사용하셔서, 이벤트 기반의 소켓처리 방식으로 하시면 싱글쓰레드로도 원하시는 것 만큼의 효과를 보실 수 있을것입니다.
윈도우라면 당연히 IOCP를 사용하여햐 할 것이구요. IOCP의 특성상 온전한 싱글쓰레드는 힘들겠지만, 비슷하게는 구현이 가능할 겁니다.

epoll에 대한 설명은 joinc wiki등에 잘 나와 있으므로 참고하시면 될듯합니다.

時日也放聲大哭

댓글 달기

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