오래 못 할 짓 하지 않기
Go 언어 실습 2 본문
728x90
여러 배열 (예시에서는 URL) 에 대한 작업을 할 때
하나하나 처리하는 게 아니라 동시에 하고 싶은 경우에 어떻게 처리할까?
> Goroutines
goroutine을 사용하기 전에는 이런 게 있다면
you로 칭찬 10번 때리고, 그 뒤에 Min으로 칭찬 10번 때린다.
하지만 우리가 원하는 건 동시에 you Min을 같이 칭찬하는 것이다.
같이 하는 법은?
> Goroutine =
[ 사용 방법 ]
함수 Call 앞에 Go만 붙이면 된다.
[ 주의 사항 / 한계점 ]
main 함수에 두 개의 함수 모두 go를 붙이면 아무것도 출력되지 않는다
이유 : main함수는 go routine을 기다리지 않는다.
따라서 , main이 기다릴만한 함수가 하나 돌고 있어야 main이 유효하기에 모두 go를 때려버리면 안 됨.
우리 중에 한 명은 집지키고 있어야함.
10번 줄처럼 저렇게 go를 붙인 함수의 return값을 변수에 받을 수 없다.
그럼 어떻게 받아야 할까...
go로 부른 함수 <-> main에서 값을 주고 받기 위해선 Channel이 필요하다.
Channel
9번 line : channel을 만들어서
12번 line : 함수에 같이 넘겨준다.
16번 line : result에 channel 값을 받아온다.
22번 line : main과 주고 받는 channel에 넣는다.
문자열을 주고 받다보면 이렇게 된다.
<-c는 그 안에 값이 들어올 때까지 기다린다.
= Blocking operation
socket programming에서는 read() 와 같다.
c <- 로 보내는 게 있으면
<- c 로 받는 게 있어야 하고
Type도 같아야 한다.
'4학년 > 캡스톤 (Capstone)' 카테고리의 다른 글
rclone 주요 기능 분석 ( flow 위주 ) (0) | 2024.12.27 |
---|---|
Go 언어 실습 3 코드 (0) | 2024.12.24 |
Go 언어 실습 1 (0) | 2024.12.23 |
Go언어 정리 (0) | 2024.12.23 |
Ceph Storage (0) | 2024.08.12 |