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调度机制