프로그램(운영체제) > 프로세스 > 스레드
앱 하나가 프로세스고, 그 안에 처리가 스레드
운영체제로부터 자원을 할당받는 작업의 단위
쉽게 말하면, 프로그램이 돌아가는 것이 프로세스이다. 예를 들면 컴퓨터를 키면 카카오톡을 키고 크롬을 키는데 이게 각각의 프로세스를 실행시키는 것임
프로세스가 할당받은 자원을 이용하는 실행의 단위이며, 프로세스 내에 여러 개 생길수 있다.
예를 들면, 크롬에서 노래를 다운 받으면서 글을 쓰거나, 검색을 하는 등의 작업들.
스레드가 자원을 공유해서 속도와 효율은 낫지만, 단점은 다수의 스레드가 자원에 손을 대므로 에러가 남
다수의 프로세스가 작업을 처리하는 것
CPU는 한번에 하나의 작업만 가능하기 때문에, 각 프로세스를 번갈아가면서 진행되는데 속도가 빨라서 동시에 실행되는 것처럼 보이는 것
이다
예를들어 카카오톡과 크롬이 동시에 실행을 할때, 카톡이 실행되고있으면 카톡이 CPU위에 올라오고, 크롬이 실행될때는 카톡이 CPU에서 내려오고 크롬이 올라간다. 이것을 작업전환 Context Switching
이라 하는데 프로세스간의 작업전환은 비용이 많이든다.
다수의 스레드가 작업을 처리하는 것
이를 해결하는 것이 멀티 스레드이다.
예를들면, 공유오피스
를 사용자(스레드)가 사용할때 책상, 모니터 이런 공유자원을 들고나갈, 들어올 필요 없다.
공유된 자원으로 효율적
이다 (stack 부분만을 따로 가지고, 코드, 데이터, 힙 영역은 공유
하기 때문에 메모리 사용이 훨씬 효율적이다. )멀티 스레드 단점의 예로는 Internet Explorer의 작동이 중지되었습니다 라는 오류가 뜨면 모든 창들이 꺼져버리는 것이다. 반면, 크롬은 멀티프로세스 사용으로 인해 개별 창 하나가 문제가 되더라도 모든 창들이 꺼지지 않는다.
1프로세스에서 1스레드 실행
1개 register, 1개 stack으로 표현
동기화를 신경 안 써도 된다
작업전환context switch를 하지않아도 된다
(작업전환은 여러개의 스레드가 한 프로세스를 공유할때 발생하는 작업으로 비용이 많이듦)두개의 작업을 하나의 스레드, 두개의 스레드로 처리하는 경우를 가졍했을때
싱글스레드는 두 작업을 순서대로 작업을하고,
멀티스레드는 짧은 시간동안 두 개의 스레드를 번갈아가며 작업한다. 그래서 동시에 두 작업이 처리되는 것 같이 느껴진다.
하지만 이는 오히려 싱글스레드보다 작업시간이 더 걸릴수 있다.
그 이유는 스레드간의 작업전환에 시간이 오래걸리기 때문이다.
따라서 단순히 CPU만을 사용하는 계산적압이라면, 싱글스레드가 더 효율적이다.
CPU에서 여러 프로세스를 돌아가면서 실행하는 과정
실행중인 프로세스가 대기 할때 프로세스의 상태를(Context) 보관하고 대기하다가 다시 실행할 시 복구하는 비용(시간)
데드록: 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태
로그안에서 처리한다. 먼저 들어온게 있으면 锁住 (화장실 문 잠그는 것처럼)
비동기 프로그래밍이 뭔지? 왜 하는지?