一、Go

1、nil是否一定相等

package main

import (
	"fmt"
)

func main(){
	var x *int =nil
	var y interface{} =x
	fmt.Println(x==y)      //true
	fmt.Println(x==nil)    //true
	fmt.Println(y==nil)    //false
}

2、Go会不会回收线程

package main

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

var threadProfile = pprof.Lookup("threadcreate")

func main() {
	fmt.Printf("协程执行之前的线程数:%d\n", threadProfile.Count())
	var wg sync.WaitGroup
	wg.Add(100)
	for i := 0; i < 100; i++ {
		go func() {
			defer wg.Done()
            //runtime.LockOSThread() //强制回收线程
			for j := 0; j < 100; j++ {
				_, err := net.LookupHost("www.baidu.com")
				if err != nil {
					fmt.Println("err=", err)
				}
			}
		}()
	}
	wg.Wait()
	fmt.Printf("协程执行之后的线程数:%d\n", threadProfile.Count())
}

结果:

协程执行之前的线程数:6
协程执行之后的线程数:108

暂时不会回收,go还没解决此问题

难留少年时,总有少年来!

无论你是年轻还是年长,所有程序员都需要记住:时刻努力学习新技术,否则就会被时代抛弃!

09-12 05:37