美文网首页
go的GOMAXPROCS测试

go的GOMAXPROCS测试

作者: hijiang | 来源:发表于2019-06-02 15:22 被阅读0次

go默认启动的线程数量是CPU核心数,通过GOMAXPROCS可以设置线程数量,但是貌似即使设置runtime.GOMAXPROCS(1),也还是会启动多个线程。
下面是一段测试代码:

package main

import (
    "time"
    "runtime"
    "fmt"
)

func print(a string) {
    for {
        fmt.Println(a, " is running")
        time.Sleep(time.Second)
    }
}
func main() {
    runtime.GOMAXPROCS(1)
    go print("task 1")
    go print("task 2")
    go print("task 3")
    go print("task 4")
    go print("task 5")
    go print("task 6")
    go print("task 7")
    go print("task 8")

    for {
        time.Sleep(time.Second*10)
    }
}

ps看下起了几个线程:
ps -T -p 42727

   PID   SPID TTY          TIME CMD
 42727  42727 pts/13   00:00:00 test
 42727  42728 pts/13   00:00:00 test
 42727  42729 pts/13   00:00:00 test
 42727  42730 pts/13   00:00:00 test
 42727  42731 pts/13   00:00:00 test

虽然只设置了1,但是也还是启动了5个线程。

而且通过strace,发现同一个goroutine不会在同一个线程执行:

[pid 42728] futex(0x559010, FUTEX_WAIT_PRIVATE, 0, {60, 0} <unfinished ...>
[pid 42730] <... futex resumed> )       = -1 ETIMEDOUT (Connection timed out)
[pid 42730] futex(0x559010, FUTEX_WAKE_PRIVATE, 1) = 1
[pid 42730] futex(0xc000070148, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 42728] <... futex resumed> )       = 0
[pid 42731] <... futex resumed> )       = 0
[pid 42730] <... futex resumed> )       = 1
[pid 42731] write(1, "task 4  is running\n", 19 <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] futex(0x55b8c0, FUTEX_WAIT_PRIVATE, 0, {0, 680851} <unfinished ...>
[pid 42731] <... write resumed> )       = 19
[pid 42731] write(1, "task 8  is running\n", 19 <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42731] <... write resumed> )       = 19
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] futex(0xc000070148, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid 42730] <... futex resumed> )       = -1 ETIMEDOUT (Connection timed out)
[pid 42730] futex(0xc000070148, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42731] <... futex resumed> )       = 0
[pid 42730] <... futex resumed> )       = 1
[pid 42731] write(1, "task 6  is running\n", 19 <unfinished ...>
[pid 42730] futex(0x55b8c0, FUTEX_WAIT_PRIVATE, 0, {0, 971461976} <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] <... write resumed> )       = 19
[pid 42731] write(1, "task 7  is running\n", 19) = 19
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42731] write(1, "task 5  is running\n", 19) = 19
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] futex(0xc000070148, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42728] futex(0x559010, FUTEX_WAIT_PRIVATE, 0, {60, 0} <unfinished ...>
[pid 42730] <... futex resumed> )       = -1 ETIMEDOUT (Connection timed out)
[pid 42730] futex(0x559010, FUTEX_WAKE_PRIVATE, 1) = 1
[pid 42728] <... futex resumed> )       = 0
[pid 42730] futex(0xc000070148, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 42731] <... futex resumed> )       = 0
[pid 42730] <... futex resumed> )       = 1
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] futex(0x55b8c0, FUTEX_WAIT_PRIVATE, 0, {0, 25068389} <unfinished ...>
[pid 42731] write(1, "task 1  is running\n", 19) = 19
[pid 42731] write(1, "task 3  is running\n", 19 <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42731] <... write resumed> )       = 19
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] write(1, "task 2  is running\n", 19 <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42731] <... write resumed> )       = 19
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] futex(0xc000070148, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42728] futex(0x559010, FUTEX_WAIT_PRIVATE, 0, {60, 0} <unfinished ...>
[pid 42730] <... futex resumed> )       = -1 ETIMEDOUT (Connection timed out)
[pid 42730] futex(0x559010, FUTEX_WAKE_PRIVATE, 1) = 1
[pid 42728] <... futex resumed> )       = 0
[pid 42730] futex(0xc000070148, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] <... futex resumed> )       = 1
[pid 42731] <... futex resumed> )       = 0
[pid 42730] futex(0x55b8c0, FUTEX_WAIT_PRIVATE, 0, {0, 973300642} <unfinished ...>
[pid 42731] write(1, "task 5  is running\n", 19 <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42731] <... write resumed> )       = 19
[pid 42731] write(1, "task 4  is running\n", 19 <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] <... write resumed> )       = 19
[pid 42731] write(1, "task 8  is running\n", 19 <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42731] <... write resumed> )       = 19
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] write(1, "task 6  is running\n", 19) = 19
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42731] write(1, "task 7  is running\n", 19) = 19
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] futex(0xc000070148, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42728] futex(0x559010, FUTEX_WAIT_PRIVATE, 0, {60, 0} <unfinished ...>
[pid 42730] <... futex resumed> )       = -1 ETIMEDOUT (Connection timed out)
[pid 42730] futex(0x559010, FUTEX_WAKE_PRIVATE, 1) = 1
[pid 42728] <... futex resumed> )       = 0
[pid 42730] futex(0xc000070148, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] <... futex resumed> )       = 1
[pid 42731] <... futex resumed> )       = 0
[pid 42730] futex(0x55b8c0, FUTEX_WAIT_PRIVATE, 0, {0, 90833} <unfinished ...>
[pid 42731] write(1, "task 3  is running\n", 19 <unfinished ...>
[pid 42730] <... futex resumed> )       = -1 ETIMEDOUT (Connection timed out)
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42730] futex(0xc00004a848, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid 42731] <... write resumed> )       = 19
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] write(1, "task 1  is running\n", 19 <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42731] <... write resumed> )       = 19
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] futex(0xc00004a848, FUTEX_WAKE_PRIVATE, 1) = 1
[pid 42730] <... futex resumed> )       = 0
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42731] futex(0x55b8c0, FUTEX_WAIT_PRIVATE, 0, {0, 1630595} <unfinished ...>
[pid 42730] write(1, "task 2  is running\n", 19 <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] <... write resumed> )       = 19
[pid 42730] futex(0xc00004a848, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42728] futex(0x559010, FUTEX_WAIT_PRIVATE, 0, {60, 0} <unfinished ...>
[pid 42731] <... futex resumed> )       = -1 ETIMEDOUT (Connection timed out)
[pid 42731] futex(0x559010, FUTEX_WAKE_PRIVATE, 1) = 1
[pid 42728] <... futex resumed> )       = 0
[pid 42731] futex(0xc00004a848, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] <... futex resumed> )       = 1
[pid 42730] <... futex resumed> )       = 0
[pid 42731] futex(0x55b8c0, FUTEX_WAIT_PRIVATE, 0, {0, 473306} <unfinished ...>
[pid 42730] write(1, "task 8  is running\n", 19 <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42730] <... write resumed> )       = 19
[pid 42730] write(1, "task 5  is running\n", 19 <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] <... write resumed> )       = 19
[pid 42731] <... futex resumed> )       = -1 ETIMEDOUT (Connection timed out)
[pid 42730] write(1, "task 4  is running\n", 19 <unfinished ...>
[pid 42731] futex(0xc000070148, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid 42730] <... write resumed> )       = 19
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42730] futex(0xc000070148, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] <... futex resumed> )       = 1
[pid 42731] <... futex resumed> )       = 0
[pid 42730] futex(0x55b8c0, FUTEX_WAIT_PRIVATE, 0, {0, 1446643} <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42731] write(1, "task 6  is running\n", 19 <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] <... write resumed> )       = 19
[pid 42731] futex(0xc000070148, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42728] futex(0x559010, FUTEX_WAIT_PRIVATE, 0, {60, 0} <unfinished ...>
[pid 42730] <... futex resumed> )       = -1 ETIMEDOUT (Connection timed out)
[pid 42730] futex(0x559010, FUTEX_WAKE_PRIVATE, 1) = 1
[pid 42728] <... futex resumed> )       = 0
[pid 42730] futex(0xc000070148, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] <... futex resumed> )       = 1
[pid 42731] <... futex resumed> )       = 0
[pid 42730] futex(0x55b8c0, FUTEX_WAIT_PRIVATE, 0, {0, 987829517} <unfinished ...>
[pid 42731] write(1, "task 7  is running\n", 19) = 19    //这里是42731
[pid 42731] futex(0xc000070148, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42728] futex(0x559010, FUTEX_WAIT_PRIVATE, 0, {60, 0} <unfinished ...>
[pid 42730] <... futex resumed> )       = -1 ETIMEDOUT (Connection timed out)
[pid 42730] futex(0x559010, FUTEX_WAKE_PRIVATE, 1) = 1
[pid 42728] <... futex resumed> )       = 0
[pid 42728] sched_yield()               = 0
[pid 42730] futex(0xc000070148, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 42728] futex(0x558f10, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] <... futex resumed> )       = 1
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42730] futex(0x55b8c0, FUTEX_WAIT_PRIVATE, 0, {0, 14438} <unfinished ...>
[pid 42731] <... futex resumed> )       = 0
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] write(1, "task 1  is running\n", 19 <unfinished ...>
[pid 42730] <... futex resumed> )       = -1 ETIMEDOUT (Connection timed out)
[pid 42730] futex(0xc00004a848, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] <... write resumed> )       = 19
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42728] futex(0xc00004a848, FUTEX_WAKE_PRIVATE, 1) = 1
[pid 42731] futex(0xc000070148, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] <... futex resumed> )       = 0
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] futex(0xc000070148, FUTEX_WAKE_PRIVATE, 1) = 1
[pid 42731] <... futex resumed> )       = 0
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42730] futex(0x55b8c0, FUTEX_WAIT_PRIVATE, 0, {0, 243373} <unfinished ...>
[pid 42731] write(1, "task 3  is running\n", 19 <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] <... futex resumed> )       = -1 ETIMEDOUT (Connection timed out)
[pid 42731] <... write resumed> )       = 19
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42731] write(1, "task 4  is running\n", 19 <unfinished ...>
[pid 42730] futex(0xc00004a848, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid 42731] <... write resumed> )       = 19
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] write(1, "task 2  is running\n", 19 <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42731] <... write resumed> )       = 19
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] write(1, "task 8  is running\n", 19) = 19
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42731] write(1, "task 5  is running\n", 19 <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] <... write resumed> )       = 19
[pid 42731] futex(0xc00004a848, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42731] <... futex resumed> )       = 1
[pid 42730] <... futex resumed> )       = 0
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] futex(0x55b8c0, FUTEX_WAIT_PRIVATE, 0, {0, 990526176} <unfinished ...>
[pid 42730] write(1, "task 7  is running\n", 19) = 19
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42730] write(1, "task 6  is running\n", 19) = 19
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] futex(0xc00004a848, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42728] futex(0x559010, FUTEX_WAIT_PRIVATE, 0, {60, 0} <unfinished ...>
[pid 42731] <... futex resumed> )       = -1 ETIMEDOUT (Connection timed out)
[pid 42731] futex(0x559010, FUTEX_WAKE_PRIVATE, 1) = 1
[pid 42728] <... futex resumed> )       = 0
[pid 42731] futex(0xc00004a848, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 42728] sched_yield()               = 0
[pid 42728] futex(0x558f10, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 42731] <... futex resumed> )       = 1
[pid 42730] <... futex resumed> )       = 0
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] write(1, "task 2  is running\n", 19) = 19
[pid 42731] futex(0x55b8c0, FUTEX_WAIT_PRIVATE, 0, {0, 2449237} <unfinished ...>
[pid 42730] write(1, "task 1  is running\n", 19 <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42730] <... write resumed> )       = 19
[pid 42730] write(1, "task 3  is running\n", 19 <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] <... write resumed> )       = 19
[pid 42730] write(1, "task 4  is running\n", 19 <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42730] <... write resumed> )       = 19
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] futex(0xc00004a848, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid 42731] <... futex resumed> )       = -1 ETIMEDOUT (Connection timed out)
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42728] futex(0x559010, FUTEX_WAIT_PRIVATE, 0, {60, 0} <unfinished ...>
[pid 42731] futex(0x559010, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 42731] futex(0xc00004a848, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 42728] <... futex resumed> )       = -1 EAGAIN (Resource temporarily unavailable)
[pid 42731] <... futex resumed> )       = 1
[pid 42730] <... futex resumed> )       = 0
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42731] futex(0x55b8c0, FUTEX_WAIT_PRIVATE, 0, {0, 994786346} <unfinished ...>
[pid 42730] write(1, "task 6  is running\n", 19) = 19
[pid 42730] write(1, "task 8  is running\n", 19) = 19
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42730] write(1, "task 5  is running\n", 19 <unfinished ...>
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] <... write resumed> )       = 19
[pid 42730] write(1, "task 7  is running\n", 19 <unfinished ...>  //这里是42730
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42730] <... write resumed> )       = 19
[pid 42728] nanosleep({0, 20000},  <unfinished ...>
[pid 42730] futex(0xc00004a848, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...>
[pid 42728] <... nanosleep resumed> NULL) = 0
[pid 42728] futex(0x559010, FUTEX_WAIT_PRIVATE, 0, {60, 0}^Cstrace: Process 42727 detached

相关文章

  • go的GOMAXPROCS测试

    go默认启动的线程数量是CPU核心数,通过GOMAXPROCS可以设置线程数量,但是貌似即使设置runtime.G...

  • Go语言之GOMAXPROCS

    调用runtime.GOMAXPROCS()用来设置可以并行计算的CPU核数的最大值,并返回之前的值

  • go runtime包的使用

    runtime.GOMAXPROCS函数 通过runtime.GOMAXPROCS函数,应用程序何以在运行期间设置...

  • go语言函数测试

    go语言测试方法 测试split 编写的测试函数 go 测试使用的命令

  • GO学习笔记(17) -测试

    测试工具 —go test go test命令用于对Go语言编写的程序进行测试。 测试规范 测试文件必须为"_te...

  • 单元测试&基准测试&样本测试&测试覆盖率

    1.单元测试 1.1.go test 目录 1.2.go test 测试源码文件 测试的源码文件 1.3.go t...

  • go语言测试框架

    go语言内置的测试框架能够完成基本的功能测试,基准测试,和样本测试。 测试框架 go语言测试单元以包为单位组织,包...

  • Golang压力测试

    Go Test工具 Go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程是类似的,并不需要...

  • 用golang程序跑满cpu

    test.go hello.go 下图是测试的

  • 15. Go极简教程 编写测试

    Go拥有一个轻量级的测试框架,它由 go test 命令和 testing 包构成 hello.go 编写待测试的...

网友评论

      本文标题:go的GOMAXPROCS测试

      本文链接:https://www.haomeiwen.com/subject/ekuxxctx.html