跳转至
阅读量:

runtime 包

属性值

  • runtime.Version():Go 版本号;
  • runtime.GOARCH:当前运行环境架构;
  • runtime.GOOS:当前运行的操作系统;
  • runtime.GOROOT():获取 GOROOT 路径;
  • runtime.NumCgoCall():获取当前进程调用 CGO 次数;
  • runtime.NumGoroutine():获取当前程序启动的 Goroutine 数量;
  • runtime.NumCPU():返回当前环境逻辑 CPU 数量;

方法

  • runtime.GOMAXPROCS(int):设置可同时执行的最大CPU数,并返回先前的设置;
  • runtime.GC():手动触发 GC。在程序中执行一些占用大量内存的操作后,手动触发 GC 可以让内存回收更加及时,避免出现内存不足等问题。需要注意的是,runtime.gc() 不会立即触发垃圾回收,而是将垃圾回收的操作标记为“可执行”,等待下一次垃圾回收周期到来时再进行回收操作。因此,如果需要及时地释放内存,还需要手动调用 runtime.Gosched() 或者 runtime.LockOSThread() 等函数让垃圾回收线程尽快执行;
  • runtime.SetFinalizer(obj any, finalizer any):Go提供对象被GC回收时的一个注册函数,可以在对象被回收的时候回调函数。finalizer 函数必须接受一个指向对象的指针作为参数,在finalizer 中的panic无法被recover。对象被垃圾回收时,finalizer 函数的调用是异步的,也就是说不能保证 finalizer 函数会在对象被回收之前执行;
  • runtime.KeepAlive():用于防止一个对象被提前回收。注意,KeepAlive仅在需要保证对象存活的场景中使用,否则可能会影响垃圾回收器的正常工作。KeepAlive() 的调用必须在对象的最后一次使用之后,否则可能会产生不必要的开销;
  • runtime.Goexit():用于立即终止当前 goroutine 的执行。在调用 runtime.Goexit() 函数时,当前 goroutine 会立即终止执行,并且不会执行当前 goroutine 中未被执行的 defer 语句;
  • runtime.Gosched():用于让出当前 goroutine 的执行权,让其他 goroutine 有机会执行。在某些情况下,一个 goroutine 可能会长时间占用 CPU 资源,导致其他 goroutine 无法执行。runtime.Gosched() 函数可以解决这个问题,让其他 goroutine 有机会执行。在调用 runtime.Gosched() 函数时,当前 goroutine 会让出执行权,让其他 goroutine 有机会执行。当其他 goroutine 执行完毕后,当前 goroutine 会继续执行;
  • runtime.LockOSThread():用于将当前 goroutine 锁定到当前操作系统线程上。在多线程编程中,有时我们需要将某个 goroutine 锁定到特定的线程上,以保证线程安全。在调用 runtime.LockOSThread() 函数时,当前 goroutine 会被锁定到当前操作系统线程上。在锁定之后,这个 goroutine 只会在这个线程上执行,直到调用 runtime.UnlockOSThread() 函数释放锁定;
  • runtime.UnlockOSThread():用于释放当前 goroutine 锁定的操作系统线程。

评论