Lifove Story

static방법으로 wait, notify 이용하기 (자바 멀티 쓰레드 사용시) 본문

Lifove Programming

static방법으로 wait, notify 이용하기 (자바 멀티 쓰레드 사용시)

Lifove 2013. 8. 27. 19:41

멀티쓰레드를 이용한 프로그래밍이 좋다는 생각만 있었지, 얼마나 좋을지는 별로 피부에 와 닿지 않아서, 별로 사용을 하지 않았었다.

대신, 서버에 프로세스를 여러개 돌리는 방식으로 성능을 높이는 방법을 썼었는데, 최근에 내가 사용하는 서버의 코어가 24개인 것을 보고, 쓰레드 24개를 한번에 돌리면, 20일 돌아갈 것을 하루 만에 끝낼 수 있겠구나 하고, 내가 만든 프로그램을 멀티스레딩을 사용할 수 있게 구현을 하였다.

기존에는 CPU사용율이 100% * 내가 돌리는 프로세스 수 (보통 4개) =400%가 맥시멈이었는데, 멀티스레딩이 적용된 프로그램은 최대  CPU사용량이 2400%가 나온다. 성능의 효율 측면에서 쓰레드를 사용하지 않을 수 밖에 없었다.

쓰레드를 적용하는 방식은 여러가지 있는데, 일단은

  1. 클래스를 선언하는 곳에 extends 하거나 Runnable을 implements Runnable 하면된다.
    1. extends방식의 예제
      • http://www.cs.nccu.edu.tw/~linw/javadoc/tutorial/java/threads/simple.html
    2. implements방식의 예제
      • http://www.tutorialspoint.com/java/java_multithreading.htm
  2. 그리고, void run()에 쓰레드 실행하고 싶은 내용들이 들어가면 끝.
한 번에 굉장히 많은 쓰레드를 돌리게 되면, 메모리 부족이나, 쓰레드 스캐쥴링하는 것에 컴퓨터 자원을 많이 쓸 수 있으므로, 코어수에 맞추어서 아니면 조금 많은 수의 크기로 쓰레드 풀 (pool)을 만들어서, 풀의 최대 크기 만큼만 쓰레드를 돌리고 하나가 끝나서 풀에 자리가 나면 대기중인 다음 쓰레드를 돌리게 할 수 있도 있다. 예제) http://www.journaldev.com/1069/java-thread-pool-example-using-executors-and-threadpoolexecutor


반응형