bshc.log
로그인
bshc.log
로그인
spawn VS fork
About_work
·
2023년 4월 23일
팔로우
0
0
process, thread
목록 보기
11/23
Spawn
윈도우즈 및 리눅스/유닉스에서 사용되는 다른 프로세스 생성 방식 중 하나
새로운 파이썬 인터프리터를 생성하여 자식 프로세스를 생성하는 방법
이 방식은 운영체제에서 별도의 프로세스를 생성하는 방식이므로, 안전성이 높으며 다양한 운영체제에서 사용
nlrl2, pytorch 등등에서는 기본적으로 multiprocessing을 spawn방식으로 합니다.
자식 프로세스를 생성할 떄, 부모 프로세스의 환경(메모리)을 그대로 복제하지 않음
자식 프로세스를 생성할 때, 파이썬 interpreter를 새로 켜고, 돌리려는 타겟이 있는 스크립트를 다시 import 후 타겟 함수 실행
그러므로 각각의 프로세스는 독립적인 메모리 공간을 가지게 됩니다.
장점
:
이식성
: 다양한 운영 체제에서 잘 동작하며, 특히 Windows에서 주로 사용됩니다.
안정성
: 부모 프로세스의 자원을 복제하지 않고 새로운 프로세스를 완전히 새롭게 시작하기 때문에,
메모리 누수나 상태 공유로 인한 문제를 줄일 수 있음
단점
:
시작 시간
:
새 프로세스를 시작할 때마다 프로그램의 전체 환경을 다시 로드해야 하므로,
fork
방식에 비해 상대적으로 시작 시간이 더 길 수 있습니다.
자원 사용량
:
새로운 프로세스 환경을 완전히 새롭게 구성해야 하기 때문에, 초기 자원 사용량이 더 클 수 있습니다.
프로세스가 'spawn' 방식으로 생성될 때, 현재 실행 중인 코드의 상태(예를 들어 전역 변수나 모듈 수준에서 설정된 설정들)가 새 프로세스에 자동으로 전달되지 않아요.
따라서, 만약 시뮬레이터 스크립트를 실행 중인 코드에서 변경사항이 있더라도, 새로 'spawn'된 프로세스에서는 이러한 변경사항이 적용되지 않은 채로 시작될 수 있어요.
특히, Pybullet 같은 외부 라이브러리나 시뮬레이션 환경을 사용하는 경우, 코드 내에서 동적으로 변경사항을 적용하려고 할 때, 이 변경사항들이 새로운 자식 프로세스에 자동으로 반영되지 않기 때문에 문제가 발생할 수 있어요.
이는 자식 프로세스가 부모 프로세스의 현재 상태를 '복제'하지 않기 때문이에요.
fork
fork는 유닉스(Unix) 및 유닉스 기반 운영 체제에서 사용되는 시스템 콜(System call) 중 하나입니다.
C, C++, 자바 등의 언어에서 사용됩니다.
부모 프로세스의 상태와 메모리를 복제하여 자식 프로세스를 생성합니다.
상대적으로 빠르게 프로세스를 생성할 수 있습니다.
부모 프로세스와 자식 프로세스는 메모리를 공유합니다.
현재 프로세스의 모든 state (생성한 객체, 열려있는 파일, import된 것들까지) 전부 메모리에서 그대로 복사 후 타겟 함수 실행
병렬 처리를 수행할 때 자주 사용됩니다.
장점
:
성능
: 부모 프로세스의 메모리 페이지를 복제하기 때문에, 새 프로세스 생성이 매우 빠릅니다. 특히 Linux 같은 시스템에서 효율적입니다.
자원 효율성
: 초기 자원 사용량이 적고, 프로세스 생성 시간이 짧습니다.
copy-on-write
기술 덕분에 메모리 페이지는 실제로 수정될 때까지 부모와 자식 프로세스 간에 공유될 수 있습니다.
단점
:
이식성 문제
: Windows와 같은 일부 운영 체제에서는 지원되지 않습니다.
안정성 문제
:
부모 프로세스의 자원과 상태를 그대로 복제하기 때문에, 파일 핸들러나 소켓과 같은 자원을 공유하게 되어, 예상치 못한 상태 공유 문제가 발생할 수 있습니다.
메모리 누수
:
부모 프로세스가 큰 메모리를 사용하고 있을 경우, 자식 프로세스도 동일한 양의 메모리를 사용할 것으로 예상되어, 시스템의 메모리 사용량이 크게 증가할 수 있습니다.
About_work
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.
팔로우
이전 포스트
process 개념
다음 포스트
[multiprocessing] SharedMemory / Pipe / Queue / Manager / Event
0개의 댓글
댓글 작성