初级会员
  • 第 46476 位会员
  • olomolo
  • 2019-12-18 10:44:15
  • Offline
  • 20 99

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 之前看过,好像是防止乱答题的现象
  • 你的goroot/bin有没有加到path里面,应该是系统找不到go.exe这个程序,你把路径加到path里,如下: ![WeChat截圖_20191226095743.png](https://static.studygolang.com/191226/cb733ab8ef207c01b157f19ac39346a6.png)
  • @nfwater 我做了下实验,觉得整个机制应该是,最新的任务不放在队列直接执行,前面的任务会在队列中再取出执行 初始队列的长度是256,你如果申请了257个任务,第257个任务会先执行,接着执行第1到256. 如果超过256,那么会把队列加长,原先的顺序会被打乱。接着会在队列的某一个位置开始添加新的任务。 代码如下, ```go var wg sync.WaitGroup var y int func main() { runtime.GOMAXPROCS(1) fmt.Println("Create Goroutines") myCreatTask() fmt.Println("Waiting To Finish") wg.Wait() fmt.Println("Terminating Program") } func myCreatTask() { y = 1 defer tick(time.Now().UTC()) for i:=0 ; i < 257; i++{ if (y == 0) { return } wg.Add(1) go myprint(i) } } func tick(tick time.Time) { fmt.Println(time.Now().UTC().Sub(tick)) } func myprint(n int) { y = 0 defer wg.Done() fmt.Println(n) } ``` 当for循环的结束条件为 i < 257(标记为n,下文n就是这个),即当前有一个任务,队列有256个任务时, 打印符合你所说的,256,0-255。 当n大于257的时候,应该重新分配了新的队列。所以顺序被打乱了,接着在新队列的某个位置开始加新的任务。 原先的任务被随机分成A和B两堆任务,接着在A后面开始加新的任务。 *以上是运行上述代码得出来的结论,非源码性结论,希望给你一点头绪。如果知道原理,望告知。