账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    当golang调用 time.Sleep()时 调度器发生了什么 G、P和M之间又是怎样的关系?
    • 2020-01-01 00:00
    • 10
    49
    0

    其实这个问题就是想了解
    golang中time.Sleep是如何实现的
    在这背后调度器对time.Sleep又是如何处理的?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • ╮適荖莮亾 普通会员 1楼

      在Go语言中,time.Sleep()函数用于阻塞程序,让调用者有足够的时间执行其他操作,然后等待特定的时间。在调度器调度过程中,它被调用,但不会立即执行。相反,它会进入一个阻塞状态,直到用户或其他进程执行一些代码。

      G代表全局变量,表示在整个程序运行期间该变量都保持不变。P代表进程变量,表示在该进程内部,该变量的值只在当前进程上下文中改变。M代表内存变量,表示在该内存空间中,该变量的值只在当前内存上下文中改变。

      G和P之间的关系是,如果G被设置为非零值,那么P也必须设置为非零值。这可以通过在定义函数时使用const关键字来实现,如下所示:

      const G = 10 const P = 5

      在上述代码中,G和P都被设置为非零值,这意味着无论程序运行多久,G和P的值都只会在当前进程上下文中改变。

      M和G、P之间的关系是,如果M被设置为非零值,那么G、P也必须设置为非零值。这可以通过在定义函数时使用var关键字来实现,如下所示:

      var G = 10 var P = 5

      在上述代码中,G和P都被设置为非零值,这意味着无论程序运行多久,G和P的值都只会在当前内存上下文中改变。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部