// 记录摘要信息 func recordSummary( scheduler scheduler.MKScheduler, detailSummary bool, record MKRecord, stopNotifier <-chan byte) { go func() { // 等待调度器开启 waitForSchedulerStart(scheduler) // 准备 var prevSchedulerSummary scheduler.SchedulerSummary var prevNumberGoroutine int var recordCount uint64 = 1 startTime := time.Now() for { // 查看监控停止通知器 select { case <-stopNotifier: return default: } // 获取摘要信息的各组成部分 currentNumberGoroutine := runtime.NumGoroutine() currentSchedulerSummary := scheduler.Summary(" ") // 比对前后两份摘要信息的一致性。只有不一致时才会予以记录 if currentNumberGoroutine != prevNumberGoroutine || !currentSchedulerSummary.Same(prevSchedulerSummary) { schedulerSummaryString := func() string { if detailSummary { return currentSchedulerSummary.Detail() } else { return currentSchedulerSummary.String() } }() // 记录摘要信息 info := fmt.Sprintf(summaryForMonitoring, recordCount, currentNumberGoroutine, schedulerSummaryString, time.Since(startTime).String(), ) record(0, info) prevNumberGoroutine = currentNumberGoroutine prevSchedulerSummary = currentSchedulerSummary recordCount++ } time.Sleep(time.Microsecond) } }() }