linux(debian)에서 java thread 생성관련 질문 입니다.

conan의 이미지

데비안 woody에 http://java.sun.com 에서 받은 J2SDK 1.4를 설치하고,
다음과 같은 소스를 작성한 후 컴파일 했습니다.

public class Hello
{
        public static void main (String[] args)
        {
                try
                {
                        Thread.sleep(10*1000);
                } catch (Exception x) {}
        }
}

그리고 실행하였을때 프로세스상태 입니다.

xxxxx 220 210 12 00:01 pts/0 00:00:00 java Hello
xxxxx 221 220 0 00:01 pts/0 00:00:00 java Hello
xxxxx 222 221 0 00:01 pts/0 00:00:00 java Hello
xxxxx 223 221 0 00:01 pts/0 00:00:00 java Hello
xxxxx 224 221 0 00:01 pts/0 00:00:00 java Hello
xxxxx 226 221 0 00:01 pts/0 00:00:00 java Hello
xxxxx 227 221 0 00:01 pts/0 00:00:00 java Hello
xxxxx 228 221 0 00:01 pts/0 00:00:00 java Hello
xxxxx 229 221 1 00:01 pts/0 00:00:00 java Hello

단일 프로세스에서 작동이 되므로 프로세스가 하나만 생성되어야 할것
같은데 이상하게도 이렇게 각각의 프로세스로 9개가 생성되는 군요...

참고로 sun workstation의 솔라리스 9에서는 하나의 프로세스만이
생성되는 군요...

어떠한 이유로 이러한 차이를 보이는것이지 알고 싶습니다.

asteroid의 이미지

Linux의 ps는 LWP까지 모두 출력해주기 때문에 여러개의 프로세스로 보이는 것입니다.

프로그램에서 하나의 쓰레드만을 생성했더라도, 가비지컬렉터같은 종류도 쓰레드로 동작하므로, 여러개의 쓰레드로 보이는 것이구요.

솔라리스의 ps에서도 -L을 붙여주면, LWP 리스트를 볼 수 있습니다.

leanblue의 이미지

일단 ps -ef 로 한 번 다시 보시면 뭔가 다른게 보이실 껍니다.

계층 구조를 이루고 있는 것을 보실 수 있으신데요

리눅스에서는 쓰레드가 프로세스를 클론 하는 방식으로 구현 되어있습니다.

정확히 저 개수와 동일하게 매칭시켜서 설명드릴 수는 없지만

부트스트랩 부분과, 메인 쓰레드, GC 등으로 이루어지기 때문에

단일 프로세스가 돈다 생각할 수 있지만,

실제로는 다수의 쓰레드가 돌기 때문에 저런 같은 결과가 나옵니다.

다음은 리눅스의 쓰레드 구현에 대한 글을 검색해서 나온 글입니다.

http://kldp.org/script/bbs/read.php?table=qa2&no=5009

최근의 레드햇 릴리즈에서는(정확한 버전은 모르겠습니다만..8.x 이상인가요?) NPTL을 지원하는 것으로 아는데

여기서 테스트 해보면 어떻게 나올지 궁금합니다.^^;;

성능면에서도 어떨지 궁금하군요..^^

거기서 테스트 할려면 j2sdk1.4.1_02 이상을 써야된다고 하는 애기도 얼핏 들은 듯 합니다만,

혹시 테스트 해보신 분 계신가요?

ps. 답글 올릴려고 보니 다른 분이 먼저 올리셨더군요.

그래도 혹시 테스트 해본 분이 계실까봐 의견을 듣고자 그냥 올립니다.^^

LeanBlue in CyberWorld!!!

댓글 달기

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