[분산 시스템] 1-6. Process vs Thread, Parallelism

gimseonjin616·2021년 12월 28일
0

분산시스템

목록 보기
7/14

Parallelism (동시성)

Parallelism은 동시성을 뜻한다. Concurrent와 다르게 Multiple Core 환경에서 사용 가능하며 멀티 프로세스의 기본이다.

완전히 동일한 타이밍에 태스크를 실행하여 다양한 파트로 나눠서 실행한다. 예를 들어 딥러닝을 위한 데이터 전처리에서 T1은 크롤링을 하고 T2는 엑셀에서 데이터를 수집하고 T3에서는 데이터베이스에서 데이터를 가져와 정제하여 마지막에 합칠 수 있다.

그림을 봐서 알겠지만 기본적으로 CPU가 1Core인 경우 만족하지 않으며 잘못 사용하면 오히려 성능이 떨어질 수 있다. 주로 CPU 사용량이 많은 딥러닝이나 블록체인 체굴등에 사용된다.

Process vs Thread

구분ProcessThread
메모리 독립성독립된 메모리공유 메모리
메모리 소모량많은 메모리 소모적은 메모리 소모
좀비 객체좀비 프로세스 생성 가능성 높음좀비 스레드 생성 가능성 낮음
오버헤드작음
생명 라이클생성/소멸 느림생성/소멸 빠름
구현 난이도코드 쉬움, 디버깅 어려움코드 어려움, 디버깅 어려움

Main Process & Sub Process

사용 라이브러리

from multiprocessing import Process
import time
import logging

Sub Process

# 프로세스 실행 함수
def proc_func(name):

    print("Sub-Process {}: starting".format(name))
    time.sleep(3)
    print("Sub-Process {}: finishing".format(name))

Main Process

def main():
    # Logging format 설정
    format = "%(asctime)s: %(message)s"
    logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S")
    

    # 함수 인자 확인
    p = Process(target=proc_func, args=('First',))

    logging.info("Main-Process : before creating Process")
    # 프로세스 시작
    p.start()

    logging.info("Main-Process : During Process")

    # logging.info("Main-Process : Terminated Process")
    # p.terminate()

    logging.info("Main-Process : Joined Process")
    p.join()

    # 프로세스 상태 확인
    print(f'Process p is alive: {p.is_alive()}')

# 메인 시작
if __name__ == '__main__':
    main()

실행 결과

profile
to be data engineer

0개의 댓글