잠시만 기다려 주세요

     '입만 나불거리고 행동하지 않는 야당을 규탄한다.'
전체검색 :  
이번주 로또 및 연금번호 발생!!   |  HOME   |  여기는?   |  바다물때표   |  알림 (16)  |  여러가지 팁 (1056)  |  추천 및 재미 (151)  |  자료실 (22)  |  
시사, 이슈, 칼럼, 평론, 비평 (600)  |  끄적거림 (129)  |  문예 창작 (705)  |  바람 따라 (69)  |  시나리오 (760)  |  드라마 대본 (248)  |  
살인!


    golang

golang - 간단한 goroutine channel 예제 go 루틴, 고루틴, 동시성
이 름 : 바다아이   |   조회수 : 9950         짧은 주소 : https://www.bada-ie.com/su/?211591827649
주의)
웹 작업에서는 go 루틴 너무 난발 안 하시는 것이 좋습니다.


golang 하면서 고루틴과 채널의 장점을 사용하지 않는다면 golang 을 쓸 이유가 없죠 ^^;
아래는 간단한 예제입니다.
응용한다면 여러개 함수 go 루틴으로 돌리고 한꺼번에 채널들을 모아 출력하면 빠른 성능을 볼 수 있습니다.

go 루틴은 2가지 형태입니다.
하나는 함수 앞에 go 를 붙이는 형태이고 (이건 그냥 go만 붙이면 끝)
또 하나는 리턴값이 있을때인데 이 때는

    a := make(chan string)

    go func() {
        a <- 실행함수()
        defer func() {
            if a != nil {
                close(a)
            }
        }()
    }()

    변수 := <- a

이때는 중요한 것이 있는데 리턴값을 받고 그 리턴값을 채널에 넣는 것이 중요합니다.
go 루틴이 실행되긴 하지만 동시성이라 그 밑에 프로그램이 먼저 실행될 수도 있습니다.
리턴값을 받아서 무언가를 해야한다면 리턴값이 오기전에 실행되면 안되겠죠..
위와 같이 해 놓으면 리턴값이 도달하기까지 기다립니다.
하나의 go루틴이면 위에 것은 의미가 없지만 여러개의 go 루틴이 돌면 엄청난 동시성이 강점이 됩니다.

채널은 꼭 닫아 주실 필요는 없습니다.

예제 1

// _Channels_ are the pipes that connect concurrent
// goroutines. You can send values into channels from one
// goroutine and receive those values into another
// goroutine.

package main

import "fmt"

func main() {

    // Create a new channel with `make(chan val-type)`.
    // Channels are typed by the values they convey.
    messages := make(chan string)

    // _Send_ a value into a channel using the `channel <-`
    // syntax. Here we send `"ping"`  to the `messages`
    // channel we made above, from a new goroutine.
    go func() { messages <- "ping" }()

    // The `<-channel` syntax _receives_ a value from the
    // channel. Here we'll receive the `"ping"` message
    // we sent above and print it out.
    msg := <-messages
    fmt.Println(msg)
}


예제 2
 
package main
 
import (
    "fmt"
    "sync"
)
 
func main() {
    // WaitGroup 생성. 2개의 Go루틴을 기다림.
    var wait sync.WaitGroup
    wait.Add(2)
 
    // 익명함수를 사용한 goroutine
    go func() {
        defer wait.Done() //끝나면 .Done() 호출
        fmt.Println("Hello")
    }()
 
    // 익명함수에 파라미터 전달
    go func(msg string) {
        defer wait.Done() //끝나면 .Done() 호출
        fmt.Println(msg)
    }("Hi")
 
    wait.Wait() //Go루틴 모두 끝날 때까지 대기
}


예제 3
 
package main
 
import (
    "fmt"
    "time"
)
 
func say(s string) {
    for i := 0; i < 10; i++ {
        fmt.Println(s, "***", i)
    }
}
 
func main() {
    // 함수를 동기적으로 실행
    say("Sync")
 
    // 함수를 비동기적으로 실행
    go say("Async1")
    go say("Async2")
    go say("Async3")
 
    // 3초 대기
    time.Sleep(time.Second * 3)
}
| |





      1 page / 6 page
번 호 카테고리 제 목 이름 조회수
179 golang golang , ... 바다아이 1712
178 golang golang , map . 바다아이 1324
177 golang Golang (, , data ) , ... 바다아이 1328
176 golang golang sort ... 바다아이 1558
175 golang golang html.EscapeString html.UnescapeString input value ... 바다아이 1685
174 golang golang go.mod go.sum . GOPATH SRC not module, 1.16 . 바다아이 4956
173 golang go 1.16 ... is not in GOROOT.. GOPATH .... . 바다아이 5842
172 golang , String Formatting 바다아이 7489
171 golang rand.Intn , random, , . 바다아이 6949
170 golang golang ... 바다아이 10027
169 golang golang gopath, goroot .. golang 바다아이 7612
168 golang golang ... Force download file example 바다아이 9411
167 golang golang , , cpu, memory, disk 바다아이 10700
166 golang golang , ... GOOS, GOARCH 바다아이 8482
165 golang golang checkbox ... 바다아이 8227
164 golang golang , , http .... 바다아이 8007
163 golang golang nil , nil , nil ... 바다아이 8350
162 golang 2 golang, go , .... golang .... 바다아이 11213
161 golang golang postgresql, mysql, mariadb ... ` Grave () .. .. 바다아이 8541
160 golang golang postgresql mysql, mariadb scan , null .. 바다아이 8680
159 golang golang , iconv 바다아이 11479
158 golang golang quote escape, unquote 바다아이 8881
157 golang golang , http errorLog , , ... 바다아이 8992
156 golang golang interface , 바다아이 8455
155 golang golang struct .... 바다아이 9127
154 golang golang map map , 바다아이 8659
153 golang golang map .... .... 바다아이 8177
152 golang golang slice copy 바다아이 8271
151 golang golang goto 바다아이 9127
150 golang golang slice sort , int, string, float64 바다아이 8605
| |









Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL + Mariadb ]
서버위치 : 오라클 클라우드 춘천  실행시간 : 0.06284
to webmaster... gogo sea. gogo sea.