LWP 란
Light Weight Process 의 약자로 경량 프로세스라는 의미입니다.
간단하게 Thread 입니다.
LWP 의 장점
프로세스는 독립된 영역을 가지고 있는 반면, LWP(=Thread) 는 프로세스에 있는 메모리 공간을 공유합니다.
멀티 프로세스와 멀티스레드로 비교하여 보겠습니다.
Multi Process 와 Multi Thread
특정 프로세스가 자식프로세스를 생성하는 경우 ( Multi Process )
1. 부모 프로세스의 메모리 영역을 모두 복제하기 때문에, 시간 및 공간이 많이 소요됩니다.
2. 또한 독립적인 메모리 영역을 가지기 때문에 데이터를 공유하기 어렵습니다.
3. 대신 어느 프로세스에서 장애가 발생한다고 하여, 다른 프로세스에 영향을 미치지 않습니다.
특정 프로세스가 스레드를 생성하는 경우 ( Multi Thread )
1. 하나의 프로세스의 메모리를 공유하기 때문에 메모리 사용량이 감소합니다.
2. 메모리 영역을 공유하므로 데이터 공유를 쉽게 할 수 있습니다.
3. Multi Process 대비 수행속도가 증가하게 됩니다.
4. 특정 Thread 에서 장애가 발생할 경우, 프로세스에 영향을 미치므로 다른 Thread 까지 영향을 받을 수 있습니다.
LWP Stack 조회
리눅스에서는 pstack 명령어로 프로세스의 stack 을 조회할 수 있습니다.
Thread 는 프로세스에 포함되지 않으나, LWP 값을 가지므로 이 값을 이용하여 stack 을 조회할 수 있습니다.
# ps -ef | grep java sh91 23683 12167 34 16:45 pts/4 00:00:00 java Main 2 10000 z
# pstack 23683 Thread 16 (Thread 0x7efc0f28a700 (LWP 23684)): ... Thread 15 (Thread 0x7efc0d435700 (LWP 23685)): ... Thread 7 (Thread 0x7efc0c535700 (LWP 23693)): #0 0x00007efc1076a945 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0 #1 0x00007efc0fc9dd2e in os::PlatformEvent::park() () from ... Thread 1 (Thread 0x7efc10a75740 (LWP 23683)): #0 0x00007efc10767f57 in pthread_join () from /lib64/libpthread.so.0 #1 0x00000000400058fc in ContinueInNewThread () #2 0x0000000040001ee9 in main ()
# pstack 23693 Thread 1 (process 23693): #0 0x00007efc1076a945 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0 #1 0x00007efc0fc9dd2e in os::PlatformEvent::park() () ... #9 0x00007efc10766e25 in start_thread () from /lib64/libpthread.so.0 #10 0x00007efc1029034d in clone () from /lib64/libc.so.6
'Linux > 개념' 카테고리의 다른 글
[LINUX] 세마포어 관련 RemoveIPC 프로퍼티를 설정하기 (0) | 2018.05.25 |
---|---|
[LINUX] SSH 접속불가 REMOTE HOST IDENTIFICATION HAS CHANGED 해결하기 (0) | 2018.04.30 |
[LINUX] OOM Killer 란? OOM Killer 순위 설정하기 (0) | 2018.01.25 |
[LINUX] Qt FATAL: QXcbConnection: Could not connect to display 현상 해결하기 (0) | 2017.09.26 |
[LINUX] kill -l 목록 알아보기 (0) | 2017.09.19 |