(선정기준 제외) 크롤러에 크롤러를 실행하는 쓰레드를 여러개 만들어서 실행시킨 뒤 크롤링을 할 수 있는 기능이 있는지
이 기능이 있을 때의 장점은, 첫째로 크롤러를 실행하는 쓰레드를 여러개 만들고 실행시켜서 크롤링 하면 단일쓰레드로 크롤링 할 때보다 크롤링 속도가 빨라지는 것입니다.
둘째, 크롤러 프로세스를 여러개 실행시켜서 작업하는 것과, 크롤
러를 실행하는 쓰레드를 여러개 만들어서 크롤링 할때를 비교하면 , 쓰레드를 여러개 실행하는쪽이 메모리 점유율이 더 낮습니다. 이런 차이가 생기는 이유는, 프로세스와 스레드의 메모리 구조의 차이 때문입니다.
프로세스는 만들어질 때마다 프로세스가 실행되는 컴퓨터의 메모리에 스택,힙,코드,데이터 라는 네가지 종류의 메모리 공간을 차지하지만, 스레드는 생성되면 프로세스 내에 있는 것이기 때문에 힙만 추가적으로 생성하고, 나머지 스택,코드,데이터는 생성하지 않고 이미 스레드가 있는 프로세스의 것을 씁니다. 그래서 프로세스를 여러개 생성하는 쪽보다 스레드를 여러개 생성하는 쪽이 메모리 점유율이 더 낮습니다.
셋째, 여러개의 프로세스로 작업하는 것 보다 여러개의 스레드를 만드는 쪽이 크롤링 속도도 빠릅니다.
빨라지는 이유는 스레드를 여러개 만들어도, 스레드가 있는 프로세스 내에서 스택,코드,데이터 부분은 스레드끼리 공유하기 때문에, 공유하는 부분에서는 컨텍스트 스위칭이 없어서 컨텍스트 스위칭 하는 시간이 없습니다. 그래서 프로세스를 여러개 만들 때보다 스레드를 여러개 만드는 쪽이 속도가 더 빠릅니다.
이 기능을 쓸 때의 단점은, 단일스레드로 크롤링 할 때보다 메모리 점유율과 cpu점유율이 올라가서 크롤링하는 컴퓨터의 부하가 심해진다는 단점이 있습니다.
종합하자면 이 기준을 선택할 때는, 메모리 점유율과 cpu점유율이 올라가는 것보다 속도가 빠른게 더 중요할 때입니다.
저는 크롤링하는 서버를 분산처리하면 속도와 컴퓨터의 부하가 모두 해결된다고 생각했으며, 분산처리한 서버 내에서도 스레드를 여러개 생성해서 부하가 심해지면서 속도를 높여야 할 정도로 속도가 필요하지 않았습니다. 그래서 이 기준은 제외했습니다.
-