티스토리 뷰
이전 게시글 중 자바 프로그래밍의 특징을 포스팅 할 때 멀티쓰레드를 쉽게 구현할 수 있다는 장점을 말한적 있는데 오늘은 이에 대해서 좀 더 다뤄보려고 한다.
프로세스
우리가 흔히 말하는 프로그램은 Java, C 등으로 개발 된 파일을 말합니다. 이 프로그램이 실행되는 것을 프로세스(Process)라고 합니다. 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원을 OS로 부터 할당받아 실행되면 그것이 프로세스인 것이다. 쉽게 요약하면 프로그램은 파일을 의미하고 프로세스는 실행을 의미한다고 보면 될 것 같습니다. // 프로세스 = 실행중인 프로그램
쓰레드
프로세스는 하나 이상의 쓰레드(Thread)로 구성됩니다. 쓰레드는 일종의 실행 단위로 하나의 프로세스에서는 하나 이상의 쓰레드가 수행되는데 이처럼 필연적으로 생기는 쓰레드를 메인 쓰레드라고 합니다. 쓰레드는 영어 의미로 '실'이라는 의미를 가지고 있습니다. 실 같이 연결된 하나의 흐름이라고 할 수 있습니다. 쓰레드는 주로 이 흐름이 중요하지 않을 때 사용합니다. 프로세스 내에 여러 작업이 있고 각각의 작업의 상관관계가 없을 때는 굳이 순차적으로 실행할 필요가 없죠. 그 때 이 작업을 쓰레드로 분리해서 동시에 실행하는 것 입니다. 이처럼 분리된 쓰레드를 경량 프로세스라고 부르기도 합니다. 이렇게 하나의 프로세스를 여러개의 쓰레드로 나누는 방식을 멀티쓰레딩이라고 합니다.
멀티쓰레딩
멀티쓰레딩은 동시에 진행되는 것 처럼 보이지만 실제로는 여러 작업을 번갈아가며 실행합니다. 좀 더 자세히 설명하자면 하나의 CPU는 한 번에 한가지 작업만 수행할 수 있기 때문에 각 쓰레드의 작업을 아주 짧은 시간 간격으로 번갈아가며 수행해 작업이 동시에 진행되는 것 같이 보이게 되는 것이죠. 여기서 하나의 CPU를 나누어 사용하는 것 뿐인데 어떤 장점을 얻을 수 있는 걸까? 라는 질문이 드실 것입니다. 실제로 프로세스의 성능이 쓰레드의 갯수에 비례하지 않으며 오히려 떨어지는 성능을 보일 때도 있습니다. 하지만 자원의 효율적인 사용측면이나 응답성 등의 다양한 이점 때문에 장점으로 꼽히는 것 입니다.
멀티쓰레딩의 장점
- CPU의 사용률을 향상시킨다.
- 오버헤드를 줄일 수 있다.
: 오버헤드 - 작업을 수행하는 데 걸리는 간접적인 시간, 작업시간=수행시간+오버헤드
- 자원을 효율적으로 사용할 수 있다.
: 주소공간을 공유하기 때문에 자원의 공유가 쉽고 쓰레드간 통신에 이점이 생김
- 코드 블럭을 나누어 가시성을 높일 수 있다.
- 사용자의 편의성이 향상
: 음악을 들으며 문서작성을 할 수 있는 것이 바로 멀티쓰레드로 작성되었기 때문
멀티쓰레딩의 단점
엄밀히 말해 단점은 아니며 다양한 방법으로 개선가능하다.
- 프로세스 내에서 자원을 공유하기 때문에 발생하는 동기화, 교착상태(deadlock) 문제
: 동기화(Synchronization) - 쓰레드가 번갈아가며 실행될 때 현재 작업중인 쓰레드와 공유자원의 상태가 일치하지 않아서 생기는 문제. 스레드 간에 공유하는 메모리 영역(공유자원)에서 발생, Runtime data area 중 힙 영역, 메소드 영역이 대표적.
- 해결 방안 - http://12bme.tistory.com/68
: 교착상태(deadlock) - 두 개 작업 이상을 실행하는 과정에서 다른 작업이 끝나기만을 기다리는 상태가 지속되어 어떠한 작업도 완료되지 않는 상태
- 해결 방안 - https://blog.lael.be/post/1304
'프로그래밍 > Java' 카테고리의 다른 글
Java 프로그래밍 -패키지- (1) | 2018.02.26 |
---|---|
Java 프로그래밍 -메모리 구조- (1) | 2018.02.26 |
Java 프로그래밍 -연산- (0) | 2018.02.23 |
Java 프로그래밍 -이스케이프 문자- (1) | 2018.02.23 |
Java 프로그래밍 -입출력- (0) | 2018.02.23 |
- Total
- Today
- Yesterday
- SQLite
- vue
- Next.js
- Remix
- node.js
- Quasar
- REACT
- nuxt.js
- alpine.js
- svelte
- oracle
- 이진탐색 #중복
- Angular
- DevOps
- vue.js
- gcp
- Cloud
- RDBMS
- Gatsby.js
- PostgreSQL
- nosql
- Azure
- aws
- MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |