golang Golangでgoroutine
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang Golangでgoroutine相关的知识,希望对你有一定的参考价值。
package main
import (
"fmt"
"time"
"runtime"
)
func task1() {
fmt.Println("task1 start!")
time.Sleep(time.Second * 1)
fmt.Println("task1 finished!")
}
func task2() {
fmt.Println("task2 start!")
time.Sleep(time.Second * 2)
fmt.Println("task2 finished!")
}
func main() {
go task1()
go task2()
go func() {
fmt.Println("task3 start!")
fmt.Println("task3 finished!")
}()
fmt.Println(runtime.NumGoroutine())
time.Sleep(time.Second * 3)
fmt.Println(runtime.NumGoroutine())
}
// task2 start!
// task3 start!
// task3 finished!
// 4
// task1 start!
// task1 finished!
// 3
golang GolangでHTTP / 1.1のチャンク受信
package main
import (
"net"
"net/http"
"time"
"bufio"
"io"
"strconv"
"log"
)
func main() {
// TCPソケットオープン
dialer := &net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}
conn, err := dialer.Dial("tcp", "localhost:8080")
if err != nil {
panic(err)
}
defer conn.Close()
// コネクションを通してリクエストの送信
request, err := http.NewRequest("GET", "http://localhost:8080/chunked", nil)
err = request.Write(conn)
if err != nil {
panic(err)
}
// コネクションからリーダーを作成
reader := bufio.NewReader(conn)
// ヘッダの読み込み
resp, err := http.ReadResponse(reader, request)
if err != nil {
panic(err)
}
if resp.TransferEncoding[0] != "chunked" {
panic("wront transfer encoding")
}
for {
// サイズを取得
sizeStr, err := reader.ReadBytes('\n')
if err == io.EOF {
break
}
// 16進数のサイズをパース。サイズが0ならクローズ
// HTTPではボディ要素以外の行末印をCRLFとして扱っているため、その分は読み込まない。
size, err := strconv.ParseInt(string(sizeStr[:len(sizeStr)-2]), 16, 64)
if size == 0 {
break
}
if err != nil {
panic(err)
}
// サイズ数分バッファを確保して読み込み
line := make([]byte, int(size))
reader.Read(line)
reader.Discard(2)
log.Println(" ", string(line))
}
}
以上是关于golang Golangでgoroutine的主要内容,如果未能解决你的问题,请参考以下文章
golang gographics / imagickをつかってgolangで画像をresizeする
golang goroutine例子[golang并发代码片段]
golang 多协程注意事项
golang的goroutine与channel
Golang之goroutine
golang的goroutine调度机制