Files
bulma/gpm_homax_1.go
T

52 lines
1.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import (
"fmt"
"runtime"
"sync"
"time"
)
var globalSum int64
// 进一步增加循环次数,单任务耗时延长到10秒以上
func longCPUTask(id int) {
localSum := int64(0)
loopCount := int64(500000000) * int64(id+1) // 循环次数:5e8→2e9(耗时≈10s→40s
for j := int64(1); j < loopCount; j++ {
localSum = (localSum + j*j%987654321) * 1000000007 % 123456789
if j%100000000 == 0 { // 极低频率写入全局变量,最大化独占P时间
globalSum = localSum
}
}
}
func main() {
runtime.GOMAXPROCS(1)
var wg sync.WaitGroup
startTime := time.Now()
taskDurations := make([]time.Duration, 4)
for i := 0; i < 4; i++ {
wg.Add(1)
id := i
go func() {
defer wg.Done()
taskStart := time.Now()
longCPUTask(id)
taskDurations[id] = time.Since(taskStart)
}()
}
wg.Wait()
totalDuration := time.Since(startTime)
fmt.Println("GOMAXPROCS=1")
sumDurations := time.Duration(0)
for i := 0; i < 4; i++ {
fmt.Printf("任务%d 耗时: %v\n", i, taskDurations[i])
sumDurations += taskDurations[i]
}
fmt.Printf("总耗时: %v, 4个任务之和: %v(接近)\n", totalDuration, sumDurations)
}