Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- https://firecatlibrary.tistory.com/49?category=874970
- mysql
- DNS
- web-proxy lab
- C언어
- BSD소켓
- 정글#정글사관학교#3기#내일#기대#설렘#희망#노력
- strcat
- group by
- https://coding-factory.tistory.com/641
- HTTP
- SQL
- TCP
- Error Code: 1055
- strcpy
- ip
Archives
- Today
- Total
매일을 설렘으로
[Golang] 채널(channel) 의 장점 본문
Tuker의 Go언어 프로그래밍이라는 책을 읽으면서 배운 내용에 대해서 정리해보려고 한다.
그 중에서도 채널 관련 부분이다.
채널이라는 것은 고루틴간 메세지를 전달해주는 메세지큐이다.
고루틴은 하나의 쓰레드와 1:1 매칭되어있기때문에 쓰레드라고 생각하면 쉽다.
채널은 어떤 장점이 있을까? 채널을 통해서 뮤텍스 없이 동시성 프로그래밍이 가능하다.
어떻게 동시성 처리를 할 수 있을까? 아래와 같다.
마치 공장과도 같다. 차량 생산 공정을 예를 들어보면
세 가지 설비(고루틴)가 각 역할을 하고 있다.
바디 생산 - 타이어 연결 - 페인트
세 공정이 읽고 쓰는 메모리가 다르다는 가정 하에 서로의 공정 시간에 영향을 주지 않는다.
그렇기 때문에 Tack Time에 영향을 주지 않고 Mutex가 필요 없는 것이다.
반면에 세 고루틴이 모든 공정을 맡아서 진행하면 경쟁 상태에 놓이게 되어 동시성 문제가 발생할 수 있고, 이로 인해
Tack Time에 영향을 줄 수 있다.
하고 있는 업무 역시 생산자 - 소비자 패턴으로 변경해서 얼마나 줄어들 수 있는지 확인 한번 해봐야겠다...