프로세스
실행 중인 프로그램. 실행을 위해 CPU가 필요함
- 포그라운드 프로세스(foreground process) : 사용자가 볼 수 있는 공간에서 실행되는 프로세스
- 백그라운드 프로세스(background process) : 사용자가 볼 수 없는 공간에서 실행되는 프로세스
프로세스 제어 블록 : PCB(process control block)
프로세스 관련 정보를 저장하는 자료 구조
- 프로세스 ID (PID) : 특정 프로세스를 식별하기 위해 부여하는 고유한 번호
- 레지스터 값 : 프로그램 카운터 값 포함
- 프로세스 상태
- CPU 스케줄링 정보
- 메모리 정보
- 사용한 파일과 입출력장치 정보 : 사용한 입출력장치의 정보
프로세스 확인하는 방법 :
윈도우 [작업 관리자] - [서비스] - [PID]
프로세스의 메모리
- 커널 영역
- 사용자 영역 :
- 스택 영역 : 데이터가 일시적으로 저장되는 공간(매개변수, 지역변수). 가변적
- 힙 영역 : 프로그램을 만드는 사용자
- 데이터 영역 : 프로그램이 실행되는 동안 유지할 데이터(전역변수가 저장될 공간)
- 코드 영역(텍스트 영역) : CPU가 실행할 명령어
멀티 프로세스
독립적. PID값이 모두 다름
프로세스 간 자원을 주고받을 수 있다 : 프로세스 간 통신(IPC)
process.py:
더보기
from multiprocessing import Process
import os
def foo():
print('child process', os.getpid()) # PID값
print('my parent is', os.getppid()) # 부모프로세스의 PID값
# 자식프로세스는 얼마든지 생성 가능
if __name__ == '__main__': # 여기서부터 실행해
print('parent process', os.getpid()) # parent process 35976
child1 = Process(target=foo).start() # foo라는 프로세스를 만들어서 실행해
# child process 43276 / my parent is 35976
child2 = Process(target=foo).start()
# child process 40584 / my parent is 35976
child3 = Process(target=foo).start()
# child process 43352 / my parent is 35976
def foo():
print('This is foo', os.getpid())
def bar():
print('This is bar', os.getpid())
def baz():
print('This is baz', os.getpid())
# 각기 다른 작업의 자식프로세스
if __name__ == '__main__': # 여기서부터 실행하라
print('parent process', os.getpid()) # parent process 43932
child1 = Process(target=foo).start() # This is foo 42304
child2 = Process(target=bar).start() # This is bar 43796
child3 = Process(target=baz).start() # This is baz 43152
멀티 스레드
프로세스의 구성하는 실행 흐름의 단위.
한 프로세스의 구성 요소로 자원을 공유. 같은 PID값
thread.py:
더보기
import threading
import os
def foo():
print('process id', os.getpid())
print('thread id', threading.get_native_id())
# 같은 작업을 하는 스레드 생성
if __name__ == '__main__':
print('process id', os.getpid()) # process id 42088
thread1 = threading.Thread(target=foo).start() # 스레드를 만드는 함수
# process id 42088 / thread id 40008
thread2 = threading.Thread(target=foo).start()
# process id 42088 / thread id 33148
thread3 = threading.Thread(target=foo).start()
# process id 42088 / thread id 44052
def foo():
print('This is foo', os.getpid())
def bar():
print('This is bar', os.getpid())
def baz():
print('This is baz', os.getpid())
# 다른 작업을 하는 스레드 생성 (PID값은 같음)
if __name__ == '__main__':
print('process id', os.getpid()) # process id 19020
thread1 = threading.Thread(target=foo).start() # This is foo 19020
thread2 = threading.Thread(target=bar).start() # This is bar 19020
thread3 = threading.Thread(target=baz).start() # This is baz 19020
'Python > 수업' 카테고리의 다른 글
파이썬 대패키지시대_패키지 의존성 관리 (6) | 2023.04.23 |
---|---|
파이썬의 코루틴 (2) | 2023.04.23 |
타입별 메서드의 종류 (0) | 2023.04.16 |
파이썬 문법 심화 1주차 3_Sparta Coding Club (0) | 2023.03.23 |
파이썬 문법 심화 1주차 2_Sparta Coding Club (0) | 2023.03.23 |