본문 바로가기

프로그래밍/그외

Process VS Thread

  1. Precess
    - 실행되고 있는 일의 단위를 뜻하며 프로그램 또는 명령어를 통해 생성
    - 각 Process마다 자원, 메모리주소 등을 독립적으로 할당
    - 다른 Process와 값을 공유하기 위해서는 소켓통신 등의 통신기법일 필요
    - Process가 많은 경우 context switching 과정에서 시스템에 부담을 줄 수 있음
       1) context switching: CPU가 실행되는 프로세스를 변경하는 작업


    <그림1. 프로세스 메모리의 구조>
    stack 또는 heap이 각자 영역을 침범하면 overflow 발생.
    접근할 수 없는 메모리에 접근하면 문제 발생.



  2. Thread
    - Process의 단점을 보완한 경량화 Process로 Process 생성 시 Main Thread 기본 생성
    - stack만 독립적이고 Text, Data, Heap은 공유하여 Thread 간 데이터 공유가 쉬움
    - Process가 없는 상태에서 Thread 생성 불가
    - context switching 시 stack만 처리하므로 빠르고 부하가 적음
    - 메모리 공유로 인한 문제가 발생할 수 있어 개발자들은 Thread safe하게 작업해야 함
       1) 처리 시간 차에 따른 문제, 디버깅이 어려운 문제 등
       2) ex: NSMutableArray보다 NSArray가 Thread safe함


  3. Heap VS Stack
    - Stack은 메모리를 순서대로 지정하여 접근이 빠름(차곡차곡 쌓임)
    - Heap은 아무 메모리나 할당(동적으로 여기저기)
    - struct는 stack, class는 heap구조라서 속도 차이가 있음.
    - autoreleasePool도 stack구조를 사용.


'프로그래밍 > 그외' 카테고리의 다른 글

모바일 앱 통계/관리 : Google Analytics  (1) 2017.08.16
Big-O 표기법(annotation)  (0) 2017.04.10