자바 소켓 통신 관련 공부를 하다가 발견한 내용.
내용 출처 : 자바 네트워크 소녀 네티
블로킹 + 클라이언트가 접속할 때마다 스레드를 새로 생성하는 로직으로 소켓 통신을 한다고 가정했을 때 스레드가 게송 생성되어 서버 소켓의 병목 현상과 자바 힙 메모리의 부족 현상이 발생할 수 있다.
그래서 스레드 풀링을 사용하기도 한다.
스레드를 미리 여러 개 만들어서 풀 안에 넣어 놓고 클라이언트가 서버에 접속하면 플에서 가용 스레드를 가져와서 처리하고.. 작업이 끝나면 다시 스레드
여러 클라이언트가 서버에 붙으면 스레드
즉 스레드 풀의 크기(풀 안에 들어가는 스레드 개수?)가 곧 동시 접속 수가 되겠다.
동시접속 수를 늘리기 위해 스레드 풀을 자바 힙이 허용하는 최대 한도까지 늘리는 것이 옳은가? >>
이 부분 때문에 글을 쓰게 됨.
나는 소스 코드를 짤 때 스레드 같은 걸 신경쓰지 않고 짰는데 가끔 동작하다가 어플리케이션이 멈추는 경우가 있었다. 그게 다 내가 스레드 관리를 못해서.. 가비지 컬렉터가 열일 하느라 그랬던게 아닌지..
결론 : 블로킹 방식은 필요할 때만 쓰자