쓰레드가 프로세스로 인터럽트 안주기

hbsnow의 이미지

쓰레드내에서의 인터럽트를 프로세스로 주지 않는 방법을 알고 싶습니다.

sleep(1)
를 하면 그 다음부터는 프로세스로 인터럽트가 넘어가지 않네요..

근데 1초는 낭비여서....

mach의 이미지

hbsnow wrote:
쓰레드내에서의 인터럽트를 프로세스로 주지 않는 방법을 알고 싶습니다.

sleep(1)
를 하면 그 다음부터는 프로세스로 인터럽트가 넘어가지 않네요..

근데 1초는 낭비여서....


일단 구한말 운영체제인 DOS를 제외하고는 인터럽트를 사용자 프로그램수준에서
제어할 수 없습니다.
유닉스에서는 시그널이 님의 글에서의 인터럽트입니다. 시그널이란 용어를
사용하시기를 권고합니다.

* 모든 유닉스 시스템 호출(system call)은 blocking모드와 non-blocking
mode로 동작하는 것으로 분류할 수 있습니다. 이때, sleep()은 기본적으로
blocking입니다. 탈출조건은 signal을 받거나, sleep()에 인자로 준 값(초단위시간)이
expire된 경우입니다.

님의 말씀중에 쓰레드내에서 발생된 인터럽트라는 말은 이해하기 모호합니다.
시그널이 발생했다는 것인데, 그 시그널이 누구에의해 발생하는가를 추적하는게
옳고 그에 대한 핸들링을 쓰레드를 사용하는 경우 어떻게 하는가를 보는게
옳은 접근으로 간주됩니다.
제가 보기에 문제 분석이 다소 잘못되지 않았나 우려됩니다.
차라리 님의 소스를 올려 검토 받는게 좋은 방법인듯 합니다.
kldp의 많은 분들이 한글보다도 때로는 코드로 대화하는게 의사소통이
원할한 경우가 많은 것 같아서요. :o

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

hbsnow의 이미지

1. process : select() 
                 if( FD_ISSET(x)) -> 1-1 thread create
                
1-1 thread : 
db_connect(); 
insert(); 
db_disconnect(); 

recv or fgetc or sleep... 등에 system 콜 발생시 
1에 process에 select()에서 EINTR이 잡힘(블럭풀림) 

더 분석을 해보니 db_disconnect()를 빼면 정상
문제 코드 : SQL COMMIT WORK RELEASE;

SQL COMMIT WORK RELEASE 만 하면 그 다음 system call시 프로세스에 select()에 EINTR이 잡힘..

대안이 없을까요?[/code]

mach의 이미지

hbsnow wrote:
1. process : select() 
                 if( FD_ISSET(x)) -> 1-1 thread create
                
1-1 thread : 
db_connect(); 
insert(); 
db_disconnect(); 

recv or fgetc or sleep... 등에 system 콜 발생시 
1에 process에 select()에서 EINTR이 잡힘(블럭풀림) 

더 분석을 해보니 db_disconnect()를 빼면 정상
문제 코드 : SQL COMMIT WORK RELEASE;

SQL COMMIT WORK RELEASE 만 하면 그 다음 system call시 프로세스에 select()에 EINTR이 잡힘..

대안이 없을까요?

[/code]
아마도 db서버에 연결했다가 연결 단절시에 발생하는 SIGPIPE 시그널을 수신해서
그러한것 같습니다.
이 경우에 문제(에러)가 발생한 것은 아니고요. 지극히 정상입니다.
while(1) {
    ret =  select();
    if ( ret < 0 )
    {
        if ( errno == EINTR )
            continue;
        ....
     }
     ....
}

이런 식으로 코드를 바꾸시고 사용하세요.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

hbsnow의 이미지

그렇게는 이미 했죠!
쓰레드에 시스템 콜이 프로세스로 넘어간다는게 문제지요!
쓰레드가 1000개 있으면 1000번 이 넘어가서 EINTR이 걸리겠지요!

댓글 달기

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