백엔드 언어2017. 3. 24. 19:57

쓰레드 : 하나의 동작으로 보면 된다.

프로세스 : 하나 이상의 쓰레드로 구성되어 있다.

멀티쓰레드 : 하나의 프로세스 내부에서 쓰레드가 여러개가 동작하는것


ex) 메신저를 기준으로 한다면, 첨부파일을 올리면서 채팅이 가능하다.

1쓰레드 : 첨부파일 업로드 

2쓰레드 : 채팅 발송

3쓰레드 : 채팅 수신 

이런식으로 쓰레드가 멀티로 동작할 수 있다.


실제로는 하나의 코어가 멀티쓰레드를 실행하더라도, 동시에 하는것이 아니라 번갈아가면서 처리하고 있다.

이를 context switch (컨텍스트 스위치) 라고 한다.


멀티프로세스또한 마찬가지로 하나의 코어가 프로세스 여러개를 동시에 처리하는 것처럼 번갈아가면서 처리하고 있다.

그리고 멀티코어는 여러개의 코어가 있으므로 프로세스를 번갈아가면서가 아닌 동시에 처리할 수 있게 된다.





출처 : https://wikidocs.net/230





위의 예제의 경우를 보면 쓰레드가 모두 종료되기도 전에 main 메소드가 먼저 종료되어 버렸다.

모든 쓰레드가 종료된 후에 main 메소드를 종료하려면 JOIN 을 사용하면 된다.






쓰레드 프로그래밍 시 가장 많이 실수하는 부분이 바로 쓰레드가 종료되지 않았는데 쓰레드가 종료된 줄 알고 그 다음 로직을 수행하게 만드는 일이다. 쓰레드가 종료된 후 그 다음 로직을 수행해야 할 때 꼭 필요한 것이 바로 이 join 메소드이다.


'백엔드 언어' 카테고리의 다른 글

JSTL 사용법  (0) 2017.03.24
Json-Simple 추가 및 사용법  (0) 2017.03.24
커넥션 풀  (0) 2017.03.24
생활코딩 자바 강의 정리  (0) 2017.03.24
starting tomcat v8.0 server at localhost has encountered a problem  (0) 2017.03.24
Posted by EL2A