ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [go] practice : web crawl
    Backend/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
Designed by Tistory.