首页 > 其他分享 >Golang 需要至少 5 个操作系统线程

Golang 需要至少 5 个操作系统线程

时间:2023-04-02 13:13:06浏览次数:34  
标签:操作系统 fmt Goroutine Golang 线程 runtime threadProfile

Golang 需要至少 5 个操作系统线程

  • 主线程:Golang 代码执行的入口点,负责初始化程序,并启动其他 Goroutine。
  • 垃圾回收器线程:Golang 内置了垃圾回收器,使用专门的线程来执行垃圾回收操作,回收不再使用的内存空间。
  • CPU 核心数个系统线程:每个核心需要一个系统线程来支持并发任务的执行。
  • 系统监视线程:用于监视所有线程状态,包括 Goroutine 的创建和销毁,防止出现死锁和其他问题。

*. 因此,在常规情况下,Golang 所需的最小线程数为 5。这些线程共同协作,支持 Golang 运行时的正常运行和 Goroutine 的并行执行。

代码验证

package main

import (
	"fmt"
	"runtime"
	"runtime/pprof"
)

func main() {

	runtime.GOMAXPROCS(1)
	threadProfile := pprof.Lookup("threadcreate")
	fmt.Printf(" init threads counts: %d\n", threadProfile.Count())
	fmt.Printf(" end threads counts: %d\n", threadProfile.Count())

}

标签:操作系统,fmt,Goroutine,Golang,线程,runtime,threadProfile
From: https://www.cnblogs.com/guanchaoguo/p/17280278.html

相关文章

  • 线程相关
    个人理解,如有错误,请海涵多任务调度大部分操作系统如Linux、Windos等,都是采用时间片轮转的抢占式调度方式来实现任务调度的。在这种调度方式下,每个进程执行一个任务都会在一短时间后暂停执行,切换其他进程执行任务。由于进程的上下文切换,CPU需要耗费大量的时间来保存该进程的内存......
  • golang 是抢占式调度 如果协程不主动让出 或者 阻塞 可以一直运行
    设置处理的器的数量为1是什么将处理器设置为1就是可以控制线程数呢?在GMP模型中,P与M一对一的挂载形式,通过设定GOMAXPROCS变量就能控制并行线程数。演示案例packagemainimport( "fmt" "runtime" "runtime/debug" "runtime/pprof" "time")funcmain()......
  • NonBlocking 非阻塞IO 状态下的实现单线程协程socket通信
    #服务器端#-*-coding:utf-8-*-importtimefromsocketimport*server=socket(AF_INET,SOCK_STREAM)server.bind(('127.0.0.1',8081))server.listen(5)server.setblocking(False)#至关重要的一步!!!conn_l=[]print('waiting...')whileTrue:......
  • 《30天自制操作系统笔记》---第一天
    第一天第一个实验:用二进制写一个显示helloworld的“操作系统”使用工具:1、HxD-二进制编辑器2、qumu模拟器下载了HxD–二进制编辑器编辑好了书上的二进制程序helloos0.img然后按照书上写了bat脚本。Install脚本:用来制作系统启动盘Run脚本,用来启动qumu模拟器运行。不过......
  • 第2章 线程同步精要
    第2章线程同步精要线程同步的四项原则,按重要性排列:1.首要原则是尽量最低限度地共享对象,减少需要同步的场合。一个对象能不暴露给别的线程就不要暴露;如果要暴露,优先设置对象不可更改;实在不行才暴露可修改的对象,并用同步措施来充分保护它。2.其次是使用高级的并发编程构件,如TaskQ......
  • 实现Callable接口创建线程
    ​ 通过实现Callable接口创建线程与实现Runnable接口创建线程类似,不同之处在于Callable的call()方法可以返回一个结果,并且可以抛出异常。以下是通过实现Callable接口创建线程的示例代码:importjava.util.concurrent.Callable;publicclassMyCallableimplementsCallable<Str......
  • 通过线程池的方式获取线程
    ​ 使用线程池可以更好地管理线程的数量,避免线程数量过多导致系统性能下降的问题。Java中提供了Executor框架,可以很方便地创建和管理线程池。以下是使用线程池的示例代码:importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassMa......
  • golang蒙特卡洛树算法实现五子棋AI
    已经实现蒙特卡洛树算法的通用逻辑,只需要对应结构体实现相关接口就可以直接使用该算法。优化算法主要优化GetActions生成下一步动作,要尽可能少,去掉无意义的动作。以及优化ActionPolicy从众多动作挑选比较优秀的动作。对应五子棋就是执行该动作后当前局面评分最高。packagemain......
  • Java创建线程的三种方式
    创建线程的三种方式1.继承Thread类,重写run方法publicclassMyThreadextendsThread{publicvoidrun(){System.out.println("HellofromMyThread!");}}publicclassMain{publicstaticvoidmain(String[]args){MyThreadthread......
  • Java线程:wait()和notify()
    一、wait()和notify()含义二、标准代码示例创建两个线程Thread0和Thread1。代码实现:运行流程详解三、什么时候释放锁—wait()、notify()四、用生活故事讲懂线程的等待唤醒1.老王和老李(专家程序员):2.王哥和李哥(普通程序员):3.小王和小李(新手程序员):五、问题理解1、执行wait()的......