2021.11.26 TIL

서승원·2021년 11월 26일
0

TIL

목록 보기
26/68

Thread + ServerSocket 함께 활용

serversocket을 활용해 네트워크로 크기가 2.1GB로 비교적 큰 파일을 전송하는 프로그램을 짜봤다. 한번에 한 클라이언트를 이용해 전송할 경우 4000ms = 4s 정도로 짧은 시간 안에 전송이 완료됐다.

그런데 정말로 서버를 구축한다고 하면 서버에 접속하는 client가 동시에 여럿이 있을 수밖에 없다. 그럴 경우는 cmd 창과 같이 client가 늘어나는 만큼 전송시간도 대폭 늘어나게 된다.
이럴 때를 위해서 server의 cpu를 나눠 한번에 동작을 실행하는 Thread 를 활용할 수 있다.
server 코딩


client 코딩

Thread와 관련돼어 활용한 코드를 다시 사용해서 for문을 이용한 여러개의 Thread를 생성하고, 공유하는 대기열을 통해 일을 분배하는 코드를 짰다. 3개로 나뉘어진 Thread가 대기열 workQueue로부터 IWork에 상속받은 일을 처리하게 된다. DownWork class에 파일을 전송하는 코드를 짜넣는다. WorkQueue 에 해당 DownWork 하나하나가 저장되고, apple,banana,orange 세 Thread가 할당받아 처리하게 된다. 결과를 살펴보면

하나하나의 전송속도를 따져보면 한 Thread의 능력이 CPU를 나눠가진 만큼의 능력이기때문에 느리다. 하지만 Thread 를 나누지 않고 처리할 때에 비해 한번에 접속하는 client가 늘어나는 양에 비한 전송속도의 증가량은 비율로 따졌을때 훨씬 적다. client가 적어 당장에 보기엔 더 느린것같지만 서버를 실제 구축할 때는 반드시 활용해야 한다.

profile
2년차 백엔드 개발자, crimy

0개의 댓글