首页 > 其他分享 >golang 是抢占式调度 如果协程不主动让出 或者 阻塞 可以一直运行

golang 是抢占式调度 如果协程不主动让出 或者 阻塞 可以一直运行

时间:2023-04-02 12:55:09浏览次数:35  
标签:协程 fmt 式调度 golang Println go 10000 runtime threadProfile

设置处理的器的数量为1

  • 是什么将 处理器设置为1 就是可以控制线程数呢?
    • 在 GMP 模型中,P 与 M 一对一的挂载形式,通过设定 GOMAXPROCS 变量就能控制并行线程数。

演示案例

package main

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

func main() {

	runtime.GOMAXPROCS(1)
	debug.SetMaxThreads(10)
	

	

	fmt.Println("start")
	threadProfile := pprof.Lookup("threadcreate")
	fmt.Printf(" init threads counts: %d\n", threadProfile.Count())

	go func() {
		for {
		}
		fmt.Println("end goruntine")
	}()

	time.Sleep(3 * time.Second)
	fmt.Printf(" end threads counts: %d\n", threadProfile.Count())
	fmt.Println("end")
}

默认是 10000 个线程

  • 源码
  • /usr/local/go/src/runtime/proc.go:686 schedinit
  • sched.maxmcount = 10000
  • 最大限制
    • /usr/local/go/src/runtime/proc.go:6139
    • //go:linkname setMaxThreads runtime/debug.setMaxThreads
      // sched.maxmcount = 10000

标签:协程,fmt,式调度,golang,Println,go,10000,runtime,threadProfile
From: https://www.cnblogs.com/guanchaoguo/p/17280273.html

相关文章

  • 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:......
  • golang蒙特卡洛树算法实现五子棋AI
    已经实现蒙特卡洛树算法的通用逻辑,只需要对应结构体实现相关接口就可以直接使用该算法。优化算法主要优化GetActions生成下一步动作,要尽可能少,去掉无意义的动作。以及优化ActionPolicy从众多动作挑选比较优秀的动作。对应五子棋就是执行该动作后当前局面评分最高。packagemain......
  • 协程
    目录引子协程介绍Gevent模块协程代码实战猴子补丁猴子补丁的功能(一切皆对象)monkeypatch的应用场景猴子补丁使用协程实现高并发1服务端客户端协程实现高并发2服务端客户端引子之前我们学习了线程、进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是CPU调度的......
  • (转)Golang 编程思维和工程实战
    原文:https://zhuanlan.zhihu.com/p/426368274一Golang编程思维首先,我们先来看下最基本的,就是Golang的学习技巧,比如:通读Golang的一些好的文章如 FrequentlyAskedQuestions(FAQ)或者看看 FAQ的中文翻译 ,主要是了解Golang的全貌。Go精华文章列表Go相关博客......
  • 协程
    协程#协程的概念在操作系统中,压根不存在的,操作系统中,只有进程和线程的概念,他们俩个都是由操作系统调度的#协程是用户态的轻量级线程:用户态===>程序员#协程是单线程下的并发#并发:切换和保存状态开启协程fromgeventimportspawndefres(a,b):print(a)print(b)......
  • golang并发编程-模式
    1.Generator9.Queuepackagemainimport("fmt""sync""time")constlimit=4constwork=100funcprocess(wg*sync.WaitGroup,workint,......
  • (转)Golang panic用法
    原文:https://zhuanlan.zhihu.com/p/373653492Golangpanic用法Go语言追求简洁优雅,所以,Go语言不支持传统的try…catch…finally这种异常,因为Go语言的设计者们认为,将异常......
  • golang pprof监控系列(2) —— memory,block,mutex 使用
    golangpprof监控系列(2)——memory,block,mutex使用大家好,我是蓝胖子。profile的中文被翻译轮廓,对于计算机程序而言,抛开业务逻辑不谈,它的轮廓是是啥呢?不就是cpu,内存,各......
  • 使用golang+antlr4构建一个自己的语言解析器(完结篇)
    Goland中Antlr4插件在goland中安装Antlr4插件,用于识别输入的字符在在语法文件中生成的语法树的样子,大概就是如下的摸样下载步骤:1.点击文件中的设置选项2.在插件目录......
  • 05 Golang 流程控制
    一、条件判断1.条件判断简介条件语句是用来判断给定的条件是否满足(表达式值是否为true或者false),并根据判断的结果决定执行情况的语句。go语言中的条件语句主要包含如......