-
[go] practice : web crawlBackend/GO 2016. 8. 10. 11:42
A Tour of go 의 연습문제 중
연습 : 웹 크롤러 (#71) 부분이 있다.
여기서는 go의 동시성 기능을 이용해
웹 크롤러를 병렬화해 보는 것이 목적이다.
이 예제를 해보면서 복잡했던 부분이 있다
crawl() 함수를 병렬로 처리하기 위해 go routine을 이용했다
go routine은 golang에서 지원하는 경량 쓰레드이다.
병렬로 처리하려면 공유하는 자원을 동기화 해야한다.
이 부분에 channel이라는 것을 이용을 했는데,
channel은 golang에서 지원하는 파이프라인으로
ch <- value 는 채널에 value를 넣고
value <- ch 로 값을 꺼내온다.
기본적으로, 송/수신은 상대편이 준비될 때까지 블록이 되기에
고루틴이 명시적인 락이나 조건 없이도 동기화 될 수 있도록 돕는다
고루틴을 사용하는 43라인에 보시면 고루틴 함수로 crawl함수가 실행이 되고 있다.
이 부분에서 done := make(chan bool) 이라는 고루틴을 동기화 시켜주지 않으면,
의도치 않은 종료가 발생하여 원하는 값이 생기지 않는다.
아래 첨부한 소스를 실행해보고, 또한 done := make(chan bool)과 done <- true , <-done부분을
지워보고 실행해보고 비교를 해보시면 의도치 않게 종료가 발생하는 것을 볼 수가 있습니다.
소스 첨부
.
'Backend > GO' 카테고리의 다른 글
[go] " ... " 에 대해 (1) 2019.12.13 [go] slice 연습문제 (0) 2016.07.20 [go] go-tour중 import문제 (0) 2016.07.20