很多goroutine映射到一个线程。多对1的关系。
chan是go里的一等公民。我们可以往chan里放不同类型的数据。也可以从一个声明的chan里取数据。
demo 从8:00开始
package main
import (
"fmt"
)
func main() {
ch := make(chan string)
for i:=0; i < 5000; i++ {
// go starts a goroutine
go printHelloWorld(i, ch)
}
for {
msg := <- ch
fmt.Println(msg)
}
}
func printHelloWorld(i int, ch chan string) {
for {
ch <- fmt.Sprintf("Hello world from go routine %d!\n", i)
}
}
Hello World
普通 Hello World
Hello World Server - 读取 url 中的参数
并发 Hello World - 初识 goroutine 与 channel
一个简单的排序
channel是go语言的一等公民,它跟函数一样可以作为参数来使用
fmt.Sprintf
Hello World
Hello World并发版
package main
import (
"fmt"
"time"
)
func main() {
for i:=0;i<5;i++ {
msg:=i
//go starts a goruntine 和main不是等待printHelloWorld结束在运行下去 而是新开了,并发的执行,同时执行
go printHelloWorld(i)
fmt.Print(msg)
}
time.Sleep(time.Microsecond)
//fmt.Print(msg) 在此处接收不到
}
func printHelloWorld(i int){
fmt.Printf("hello world from gorontine %d!\n",i)
}