프로세스 스레드

steyu·2022년 10월 9일
0

1. 프로세스, 스레드란

프로그램(운영체제) > 프로세스 > 스레드
앱 하나가 프로세스고, 그 안에 처리가 스레드

프로세스란?

운영체제로부터 자원을 할당받는 작업의 단위

쉽게 말하면, 프로그램이 돌아가는 것이 프로세스이다. 예를 들면 컴퓨터를 키면 카카오톡을 키고 크롬을 키는데 이게 각각의 프로세스를 실행시키는 것임

스레드란?

프로세스가 할당받은 자원을 이용하는 실행의 단위이며, 프로세스 내에 여러 개 생길수 있다.

예를 들면, 크롬에서 노래를 다운 받으면서 글을 쓰거나, 검색을 하는 등의 작업들.

프로세스 스레드 차이점

  • 프로세스는 운영체제로부터 할당 받은 작업의 단위이고, 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.
  • 프로세스들은 컴퓨터의 자원을 분할해서 쓰지만, 스레드는 프로세스마다 주어진 자원을 공유함 (프로세스는 실행될때 파일이 컴퓨터 메모리에 올려지는데, 이때 운영체제로부터 독자적인 시스템자원을 받음)

스레드가 자원을 공유해서 속도와 효율은 낫지만, 단점은 다수의 스레드가 자원에 손을 대므로 에러가 남


멀티 프로세스란

다수의 프로세스가 작업을 처리하는 것

동시성

CPU는 한번에 하나의 작업만 가능하기 때문에, 각 프로세스를 번갈아가면서 진행되는데 속도가 빨라서 동시에 실행되는 것처럼 보이는 것이다

예를들어 카카오톡과 크롬이 동시에 실행을 할때, 카톡이 실행되고있으면 카톡이 CPU위에 올라오고, 크롬이 실행될때는 카톡이 CPU에서 내려오고 크롬이 올라간다. 이것을 작업전환 Context Switching 이라 하는데 프로세스간의 작업전환은 비용이 많이든다.

멀티 프로세스 장점

  • 하나의 프로세스가 잘못 되도 프로그램은 동작함 (각각 독립적이라 동기화 필요없다)

멀티 프로세스 단점

  • 작업전환 비용이 많다

멀티 스레드란

다수의 스레드가 작업을 처리하는 것

이를 해결하는 것이 멀티 스레드이다.
예를들면, 공유오피스를 사용자(스레드)가 사용할때 책상, 모니터 이런 공유자원을 들고나갈, 들어올 필요 없다.

멀티 스레드 장점

  • 스레드 간에 긴밀하게 연결되어있어 공유된 자원으로 효율적이다 (stack 부분만을 따로 가지고, 코드, 데이터, 힙 영역은 공유하기 때문에 메모리 사용이 훨씬 효율적이다. )
  • 프로세스의 작업전환보다 더 빠르다
  • 스레드를 생성하는게 빠르다 (새로운 프로세스를 생성하는것보다 기존 프로세스에서 스레드를 생성하므로)
  • 서버가 많은 요청을 효율적으로 수행할수 있는 환경을 제공

멀티 스레드 단점

  • 스레드간 연결되어있어 한 스레드에 문제가 생기면 전체 프로세스에 문제가 생긴다.
  • 공유자원관리가 필요하다
  • 디버깅, 오류찾기 어렵다
  • 하나의 스레드만 실행중일때는 실행시간이 오히려 지연될 수 있다.

멀티 스레드 단점의 예로는 Internet Explorer의 작동이 중지되었습니다 라는 오류가 뜨면 모든 창들이 꺼져버리는 것이다. 반면, 크롬은 멀티프로세스 사용으로 인해 개별 창 하나가 문제가 되더라도 모든 창들이 꺼지지 않는다.


싱글 스레드란

1프로세스에서 1스레드 실행
1개 register, 1개 stack으로 표현

싱글스레드 장점

  • 자원접근에 대한 동기화를 신경 안 써도 된다
  • 작업전환context switch를 하지않아도 된다 (작업전환은 여러개의 스레드가 한 프로세스를 공유할때 발생하는 작업으로 비용이 많이듦)

싱글스레드 단점

  • 여러개의 CPU를 활용하지 못 한다

멀티스레드가 싱글스레드보다 나은가?

두개의 작업을 하나의 스레드, 두개의 스레드로 처리하는 경우를 가졍했을때
싱글스레드는 두 작업을 순서대로 작업을하고,
멀티스레드는 짧은 시간동안 두 개의 스레드를 번갈아가며 작업한다. 그래서 동시에 두 작업이 처리되는 것 같이 느껴진다.
하지만 이는 오히려 싱글스레드보다 작업시간이 더 걸릴수 있다.
그 이유는 스레드간의 작업전환에 시간이 오래걸리기 때문이다.
따라서 단순히 CPU만을 사용하는 계산적압이라면, 싱글스레드가 더 효율적이다.

작업전환이란?

CPU에서 여러 프로세스를 돌아가면서 실행하는 과정
실행중인 프로세스가 대기 할때 프로세스의 상태를(Context) 보관하고 대기하다가 다시 실행할 시 복구하는 비용(시간)

멀티스레드 deadlock 해결방법

데드록: 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태
로그안에서 처리한다. 먼저 들어온게 있으면 锁住 (화장실 문 잠그는 것처럼)

비동기 프로그래밍이 뭔지? 왜 하는지?

0개의 댓글