처음엔 자바로 간단히 게시글 파싱하려는 목적으로 코드를 짰음
1. 게시글 html 얻어오기
2. 얻어온 html에서 데이터 처리
3. hashset 같은곳에 처리된 데이터 저장
그런데 이렇게 포문돌리면 초당 2개씩밖에 못얻어오더라...
그래서 멀티스레드를 이용하여 코드를 짜기로 했음
스레드제한이 어느정도인지 알아보려고 여러모로 테스트한 결과 70개정도가 타임아웃 안나고 적당한 수치라는걸 알아냄
그래서 한번에 70개 돌리고 데이터 받아오고를 반복했음
근데 생각했던거보다(*70) 속도가 별로 안나는거임
왜그러나 봤더니 100m 달리기처럼 시작 땅 하면 모두가 달려나가고 마지막주자 들어오면 다시 모두 출발시키고 하니까
처리량이 톱니처럼 들쭉날쭉하는 경우가 발생
그래서 전체적으로 포문을 안돌리고 각 스레드마다 개별적으로 자기일이 끝나면 다음일을 찾아오도록 코드를 짰음
전역변수 AtomicInteger를 사용하고 hashset에 synchronized를 사용해서 멀티스레드 오류를 방지했고
속도가 맨첨에 짰던거의 100배정도로 향상됨. 네트워크 가용률이 100% 찍어서 다른거할때 렉좀먹긴하지만 그래도 만족.
1. 게시글 html 얻어오기
2. 얻어온 html에서 데이터 처리
3. hashset 같은곳에 처리된 데이터 저장
그런데 이렇게 포문돌리면 초당 2개씩밖에 못얻어오더라...
그래서 멀티스레드를 이용하여 코드를 짜기로 했음
스레드제한이 어느정도인지 알아보려고 여러모로 테스트한 결과 70개정도가 타임아웃 안나고 적당한 수치라는걸 알아냄
그래서 한번에 70개 돌리고 데이터 받아오고를 반복했음
근데 생각했던거보다(*70) 속도가 별로 안나는거임
왜그러나 봤더니 100m 달리기처럼 시작 땅 하면 모두가 달려나가고 마지막주자 들어오면 다시 모두 출발시키고 하니까
처리량이 톱니처럼 들쭉날쭉하는 경우가 발생
그래서 전체적으로 포문을 안돌리고 각 스레드마다 개별적으로 자기일이 끝나면 다음일을 찾아오도록 코드를 짰음
전역변수 AtomicInteger를 사용하고 hashset에 synchronized를 사용해서 멀티스레드 오류를 방지했고
속도가 맨첨에 짰던거의 100배정도로 향상됨. 네트워크 가용률이 100% 찍어서 다른거할때 렉좀먹긴하지만 그래도 만족.
굳잡 그게 바로 스레드 풀
멀티스레드든 뭐든 일정한 숫자의 워커 풀을 만들고 거기에 잡들을 쭉 던져서 받아먹게 하는게 널리 쓰이는 패턴입니당
바람직한 프린이네 여느 프갤럼이었으면 자바 원래 느리냐 초당 2개밖에 못하냐 하면서 언어탓하고 넘어갔을텐데
파이썬으로 하면 스레드 안나눠도 그속도 가능 ^
C++로 해도 병렬로 안하면 속도는 그게그거