1. CS특강
CPU - RAM - HDD
CPU는 요리사 RAM은 요리테이블 HDD는 요리재료... 너무 좋은 비유라 잘 이해되었다.
1) 프로세스
- 메모리(RAM)에 적재되어 실행되고 있는 프로그램의 인스턴스
- OS로부터 시스템 자원을 할당받은 작업의 단위(CPU시간, 메모리 영역)
- 프로세스는 독립된 메모리를 할당 받는데, 이 공간을 프로세스 주소 공간으로 만든다.
- 프로세스 주소 공간은 Code, Data, Stack, Heap으로 구성된다.
- 프로세스는 최소 1개의 스레드를 갖는다
2) 스레드
- 스레드는 프로세스 자원을 이용하는 여러 실행 흐름의 단위다.
- 스레드는 프로세스 주소 공간 중 Stack영역을 할당받는다.
3) 멀티 프로세스
- 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것.
- 여러 프로세스 중 하나에 문제가 발생하면, 그 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않음.
- 하지만 문맥 교환과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 된다.
- 문맥 교환은 여러 프로세스를 처리해야 하는 상황에서는 돌아가면서 여러 프로세스 작업을 처리하는데 이 과정을 의미한다.
4) 멀티 스레드
- 하나의 프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것.
- 프로세스에 비해 메모리 공간과 시스템 자원 소모가 줄어들게 된다.
- 통신방법이 간단하고, 비용이 적고 빠르다.
- 하지만, 다른 스레드에서 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정해 싱크가 안맞게 될 수 있다.
5) 비동기
- 블로킹, 논블로킹(제어권의 관점)
- 블로킹
- 함수 A가 함수 B를 호출한 뒤, 함수 B의 리턴값이 올 때까지 기다린 후 진행되는 것.
- 제어권을 넘겨주는 것.
- 논블로킹
- 함수 B의 작업 완료 여부와 상관 없이 진행되는 것.
- 제어권을 넘겨주지 않는 것.
- 동기, 비동기 (호출되는 함수의 작업 완료 여부를 신경 쓰는가?)
- 동기
- 함수 A,B를 호출할 때, A가 B의 리턴값을 계속 확인하면서 신경 쓰는 것.
- 비동기
- A가 B의 작업 완료 여부는 신경 쓰지 않는 것.
2. 프로젝트 시작
오늘 오전부터 저녁식사 전까지 프로젝트 기획 -> 와이어프레임 제작 -> 설계의 단계를 모두 해냈다... 칭찬해 나자신...
피그잼을 처음 사용해 보았다.
재밌었.....는데 어렵다... 더 열심히 공부 해야지...
다음주 한주동안 프로젝트 열심히 달리자,,, 화이팅!