일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Qumi Q2
- 소프트웨어 공학
- 파노라마
- 이클립스
- 온타리오
- 5.1채널
- NAS
- 홈시어터
- 카메라
- 크롬캐스트
- 사진
- 미니 라우터
- 캐나다
- Wamo
- 안드로이드
- Java
- 홈씨어터
- 샤오미
- 홍콩
- 자바
- nexus 5
- 대학원생
- Dolby
- 프로그래밍 팁
- 논문
- Git
- DTS
- Slimport
- 수필
- Chromecast
Archives
- Today
- Total
Lifove Story
static방법으로 wait, notify 이용하기 (자바 멀티 쓰레드 사용시) 본문
멀티쓰레드를 이용한 프로그래밍이 좋다는 생각만 있었지, 얼마나 좋을지는 별로 피부에 와 닿지 않아서, 별로 사용을 하지 않았었다.
대신, 서버에 프로세스를 여러개 돌리는 방식으로 성능을 높이는 방법을 썼었는데, 최근에 내가 사용하는 서버의 코어가 24개인 것을 보고, 쓰레드 24개를 한번에 돌리면, 20일 돌아갈 것을 하루 만에 끝낼 수 있겠구나 하고, 내가 만든 프로그램을 멀티스레딩을 사용할 수 있게 구현을 하였다.
기존에는 CPU사용율이 100% * 내가 돌리는 프로세스 수 (보통 4개) =400%가 맥시멈이었는데, 멀티스레딩이 적용된 프로그램은 최대 CPU사용량이 2400%가 나온다. 성능의 효율 측면에서 쓰레드를 사용하지 않을 수 밖에 없었다.
쓰레드를 적용하는 방식은 여러가지 있는데, 일단은
- 클래스를 선언하는 곳에 extends 하거나 Runnable을 implements Runnable 하면된다.
- extends방식의 예제
- http://www.cs.nccu.edu.tw/~linw/javadoc/tutorial/java/threads/simple.html
- implements방식의 예제
- http://www.tutorialspoint.com/java/java_multithreading.htm
- 그리고, void run()에 쓰레드 실행하고 싶은 내용들이 들어가면 끝.
한 번에 굉장히 많은 쓰레드를 돌리게 되면, 메모리 부족이나, 쓰레드 스캐쥴링하는 것에 컴퓨터 자원을 많이 쓸 수 있으므로, 코어수에 맞추어서 아니면 조금 많은 수의 크기로 쓰레드 풀 (pool)을 만들어서, 풀의 최대 크기 만큼만 쓰레드를 돌리고 하나가 끝나서 풀에 자리가 나면 대기중인 다음 쓰레드를 돌리게 할 수 있도 있다. 예제) http://www.journaldev.com/1069/java-thread-pool-example-using-executors-and-threadpoolexecutor
반응형
'Lifove Programming' 카테고리의 다른 글
Github에서 fork한 저장소 최신 원본으로 동기화 하기 (1) | 2016.04.16 |
---|---|
이클립스에서 Texlipse 사용시 스펠 체커 사용하기 (0) | 2015.05.24 |
Shell 스크립트 실행 후 메일 알림 (0) | 2013.12.19 |
이클립스에서 추가된 외부 라이브러리의 소스코드와 Javadoc추가하기 (0) | 2013.04.18 |
커멘드 라인 옵션 처리를 도와주는 CLI 라이브러리 (0) | 2013.04.18 |