go runtime包的使用

runtime.GOMAXPROCS函数

通过runtime.GOMAXPROCS函数,应用程序何以在运行期间设置运行时系统中得P最大数量。但这会引起“Stop the Word”。所以,应在应用程序最早的调用。并且最好的设置P最大值的方法是在运行Go程序之前设置好操作程序的环境变量GOMAXPROCS,而不是在程序中调用runtime.GOMAXPROCS函数。

最后记住,无论我们传递给函数的整数值是什么值,运行时系统的P最大值总会在1~256之间。

runtime.Goexit函数

runtime.Goexit函数被调用后,会立即使调用他的Groution的运行被终止,但其他Goroutine并不会受到影响。runtime.Goexit函数在终止调用它的Goroutine的运行之前会先执行该Groution中还没有执行的defer语句。

runtime.Gosched函数

runtime.Gosched函数的作用是暂停调用他的Goroutine的运行,调用他的Goroutine会被重新置于Gorunnable状态,并被放入调度器可运行G队列中。

runtime.NumGoroutine函数

runtime.NumGoroutine函数在被调用后,会返回系统中的处于特定状态的Goroutine的数量。这里的特指是指Grunnable\Gruning\Gsyscall\Gwaition。处于这些状态的Groutine即被看做是活跃的或者说正在被调度。

注意:垃圾回收所在Groutine的状态也处于这个范围内的话,也会被纳入该计数器。

runtime.LockOSThread和runtime.UnlockOSThread函数

前者调用会使调用他的Goroutine与当前运行它的M锁定到一起,后者调用会解除这样的锁定。

注意:

  1. 多次调用前者不会出现任何问题,但最后一次调用的记录会被保留,
  2. 即时之前没有调用前者,对后者的调用也不会产生任何副作用

debug.SetMaxStack函数

debug.SetMaxStack函数的功能是约束单个Groutine所能申请的栈空间的最大尺寸。

debug.SetMaxThreads函数

debug.SetMaxThreads函数的功能是对go语言运行时系统所使用的内核线程的数量(确切的说是M的数量)进行设置

runtime.GC函数

会让运行时系统进行一次强制性的垃圾收集,

  1. 强制的垃圾回收:不管怎样,都要进行的垃圾回收。
  2. 非强制的垃圾回收:只会在一定条件下进行的垃圾回收(即运行时,系统自上次垃圾回收之后新申请的堆内存的单元(也成为单元增量)达到指定的数值)。

debug.SetGCPercent函数

用于设置一个比率(垃圾收集比率),前面所说的单元增量与前一次垃圾收集时的岁内存的单元数量和此垃圾手机比率有关。

<触发垃圾收集的堆内存单元增量>=<上一次垃圾收集完的堆内存单元数量>*(<垃圾收集比率>/100)

    原文作者:吃猫的鱼0
    原文地址: https://www.jianshu.com/p/037a23a89286
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞