| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
Tags
- Pirogramming
- 프로그래머스
- 자바
- 백준
- EC2
- 알고리즘
- 코딩테스트
- 크루스칼
- SQL코딩테스트
- Baekjoon
- 그래프 탐색
- BFS
- 피로그래밍
- OrderBy
- 누적합
- SQL
- union find
- Java
- AWS
- django
- 프림
- JOIN
- 구현
- db
- 다익스트라
- 배포
- GROUPBY
- Database
- 최단경로
- MST
Archives
- Today
- Total
NullNull
Go routine이 무엇일까? 본문
프로세스, 스레드, Go routine
- 프로그램 : 프로세스의 명령어와 사용자 데이터를 초기화하는데 사용할 명령어와 데이터를 담은 파일
- 프로세스 : 명령어, 사용자 데이터, 시스템 영역, 실행 과정에 수집한 다양한 종류의 리소스로 구성된 독립적인 실행 단위
- 스레드 : 프로그램이나 프로세스보다 좀 더 가볍고 작은 실행 단위. 프로세스에 의해 생성되며 독립적인 제어 흐름과 스택을 가짐
- Go routine : Go 프로그램에서 동시에 실행할 수 있는 최소 단위.
- OS가 아닌 프로그램에서 Time-Sharing이 이루어짐
- 프로세스나 스레드를 OS에 요청하지 않고, 자체적으로 해결함. 프로세스, 스레드의 Context Switching 보다 비용적으로 우수함
- 프로세스나 스레드에 종속되지 않으므로, 1개의 스레드에서 1개 이상의 Go routine이 Time-Sharing되어 처리될 수 있다.
Go routine 사용 예시
Go routine을 사용하기 위해서는 go 키워드를 실행하려는 함수 앞에 적어주면 된다.
Go routine을 사용하지 않은 경우 : 순차적으로 실행된다.
package main
import "fmt"
func f1() {
for i := 0; i < 5; i++ {
fmt.Println("f1 실행 중")
}
}
func f2() {
for i := 0; i < 5; i++ {
fmt.Println("f2 실행 중")
}
}
func main() {
fmt.Println("starting")
f1()
f2()
fmt.Println("end")
}

Go routine을 사용한 경우 : 동시에 실행된다.
package main
import (
"fmt"
"time"
)
func f1() {
for i := 0; i < 5; i++ {
fmt.Println("f1 실행 중")
}
}
func f2() {
for i := 0; i < 5; i++ {
fmt.Println("f2 실행 중")
}
}
func main() {
fmt.Println("starting")
go f1()
go f2()
time.Sleep(5 * time.Second)
fmt.Println("end")
}

'프로그래밍 언어 > GO' 카테고리의 다른 글
| Go lang : defer 키워드 (0) | 2022.10.23 |
|---|
Comments