멀티태스킹(3) - 프로세스, 스레드, 프로파일링

미남로그·2021년 8월 23일
0
post-thumbnail
post-custom-banner

| Process(프로세스)

프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리상에서 실행되는 작업 단위

  • 하나의 프로그램을 실행할 때, 운영체제는 한 프로세스를 생성한다.

  • 프로세스는 운영체제의 커널(Kernel)에서 시스템 자원(CPU, 메모리, 디스크) 및 자료구조를 이용한다.

  • 예를 들어, 하나의 프로그램을 한 번 구동하면 하나의 프로세스가 메모리상에서 실행되지만 여러 번 구동하면 여러 개의 프로세스가 실행된다.

  • 파이썬에서는 os 라는 모듈에서 프로세스 관련 정보를 얻을 수 있다.

    import os
    
    # process ID
    print(os.getpid())
    
    # user ID
    print(os.getuid())
    
    # group ID
    print(os.getgid())
    
    # 현재 작업중인 디렉토리
    print(os.getcwd())
    

| 프로세스의 상태

커널 내에는 준비 큐, 대기 큐, 실행 큐 등의 자료 구조가 있으며 커널은 이것들을 이용하여 프로세스의 상태를 관리한다.

  • 생성(create) : 프로세스가 생성되는 중이다.
  • 실행(running) : 프로세스가 CPU를 차지하여 명령어들이 실행되고 있다.
  • 준비(ready) : 프로세스가 CPU를 사용하고 있지는 않지만 언제든지 사용할 수 있는 상태로, CPU가 할당되기를 기다리고 있다. 일반적으로 준비 상태의 프로세스 중 우선순위가 높은 프로세스가 CPU를 할당받는다.
  • 대기(waiting) : 보류(block)라고 부르기도 한다. 프로세스가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리고 있는 상태를 말한다.
  • 종료(terminated) : 프로세스의 실행이 종료되었다.

| 멀티 프로세스

프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다. 여러 개의 프로세서를 사용하는 것을 멀티프로세싱이라고 하며 같은 시간에 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 한다. 프로세스 관리는 운영 체제의 중요한 부분이 되었다.

| Thread(스레드)

자료 출처: 스레드(컴퓨팅)

어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다.

| 프로세스와 스레드 차이

  • 공통점: 멀티프로세스와 멀티스레드는 양쪽 모두 여러 흐름이 동시에 진행된다는 공통점을 가지고 있다.
  • 차이점
    - 멀티프로세스에서 각 프로세스는 독립적으로 실행되며 각각 별개의 메모리를 차지하고 있다.
    • 멀티스레드는 프로세스 내의 메모리를 공유해 사용한다. 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 빠르다.

하나의 프로세스가 두 개의 스레드를 실행하고 있다.

  • 멀티스레드의 장점: CPU가 여러 개일 경우에 각각의 CPU가 스레드 하나씩을 담당하는 방법으로 속도를 높임. 시스템에서는 여러 스레드가 실제 시간상으로 동시 수행이 가능하기 때문
  • 멀티스레드의 단점: 각각의 스레드 중 어느 것이 먼저 실행될지 모름. 스레드의 실행 조건에 따라 다른 결과가 나오기도 하며, 이를 경쟁 조건이라 부른다.

| 프로파일링(Profiling)

프로파일링(profiling, 프로그램 프로파일링/소프트웨어 프로파일링) 또는 성능 분석은 프로그램의 시간 복잡도 및 공간(메모리), 특정 명령어 이용, 함수 호출의 주기와 빈도 등을 측정하는 동적 프로그램 분석의 한 형태이다. 프로파일링 정보는 대개가 프로그램 최적화를 보조하기 위해 사용된다. 프로파일링은 프로파일러(profiler)라는 도구를 사용하여 프로그램 소스 코드나 이진 실행 파일을 계측 분석함으로써 수행한다.

자료 출처: 프로파일링 (컴퓨터 프로그래밍)

  • 프로파일링은 애플리케이션에서 가장 자원이 집중되는 지점을 정밀하게 찾아내는 기법입니다. 프로파일러는 애플리케이션을 실행시키고 각각의 함수 실행에 드는 시간을 찾아내는 프로그램이에요. 즉, 코드의 병목(bottleneck)을 찾아내고 성능을 측정해 주는 도구입니다.
profile
미남이 귀엽죠
post-custom-banner

0개의 댓글