java일지

프로그래밍 기초탄탄#9 스레드

리동구 2022. 11. 1. 13:31

2022/10/31

  • 학습내용

1.스레드

 

프로세스(Process)

프로그램이 실행되는 상태, 컴퓨터가 어떤 일을 하고 있는 상태를 프로세스라고 한다.

즉, 사용자가 작성한 프로그램이 os에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다.

 

작업관리자 보면 확인 가능

지금 현재 운영체제가 프로세스 여러개를 함께 실행하고 있다.

 

 

 

프로세스 실행 방법

 

1)동시성

프로세스 하나가 이것 조금하고 저것 조금하고 이런 작업을 바꾸는것을 context switching라고 한다.

이 작업이 빨리 돌아가다보니 동시에 프로세스를 돌린다고 느껴져서 동시성이라고 한다.

 

2)병렬성

프로세스 하나에 코어가 여러개가 달려서 각각 동시에 작업들을 수행하는 것이다.

ex) 듀얼코어, 쿼드코어, 옥타코어 

이런 명칭이 붙는 멀티코어 프로세서가 달린 컴퓨터에서 할 수 있는 방식이다.

 

프로그램에서도 프로세스가 실행된다.

ex) 크롬을 열면 하나의 프로세스가 실행되고 있는 것이다.

 

근데 크롬을 하나 열어서 게임을 다운로드 받으면서 검색도 할 수 있고 영상도 볼 수 있다.

한 프로세스 내에서도 여러 갈래의 작업들이 동시에 진행될 필요가 있다.

 

바로 이 갈래들을 스레드라고 한다.

 

스레드(thread)

스레드는 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다.

모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행합니다.

또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 합니다.

 

스레드 ex)

프로세서를 요리사라고 한다.

대량 주문이 들어오는 식당에서 끊임없이 만들어내는 요리 하나하나가 프로세스이다(김밥, 햄버거, 라면 등).

 

프로세서 요리사가 각각 프로세스를 돌아다니면서 요리를 만든다.

요리사가 혼자 돌아다니면서 동시적으로 작업을 하든

요리사가 여려명 있어서 병렬적으로 작업을 하든

아니면 이 두 조합을 섞어서 하든

이 메뉴들을 동시에 만들어 내는 것이다.

햄버거를 만드는 프로세스에서는 패티를 굽는 스레드가 진행되는 동안 빵에 야채를 얻는 스레드가 진행될 수도 있다.

 

컴퓨터는 프로세스마다 자원을 분할해서 할당한다.

프로세스는 컴퓨터의 자원을 분할해서 쓰지만 스레드는 프로세스마다 주어진 전체 자원을 함꼐 사용하는 것이다.

 

 

스레드의 단점

ex) 프로세스 안에 공유되는 변수에 스레드 두 개가 동시에 접근한다.

이러면 error가 발생한다.

어떤 버튼을 누를 때마다 숫자가 1씩 올라간다.

스레드 두 개가 이 버튼을 10번씩 누르면 결과가 20이 되어야 한다.

20보다 적은 숙자가 나온다.

스레드 둘이 버튼을 동시에 누르는 경우에는 숫자가 1만 올라가기 때문이다.

 

시간 문제로 발생하는 이런 상황들을 방지해야 하기 때문에 스레드를 짜는 프로그래밍은

코드를 짜기도 오류를 밝히기도 어렵다.

 

이런 어려움을 조금이나마 편하게 해주는 방식이 람다(Lambda)이다.

 

  • 참고자료

http://www.tcpschool.com/

https://www.youtube.com/watch?v=iks_Xb9DtTM&t=231s