基于 Gin 框架,在前端上传多文件到后台时(写入磁盘)使用了 goroutines,奇怪的是虽然并发执行了,但是上传消耗的时间却跟同步上传(没有使用 goroutines )差不多,难道是我使用的姿势不对?还是说多文件上传不能使用协程?
代码:
func UploadFileHandler(ctx *gin.Context) {
formData, _ := ctx.MultipartForm()
files := formData.File["fileList"]
start := time.Now()
var wg sync.WaitGroup
wg.Add(len(files))
for _, file := range files {
go func(file *multipart.FileHeader) {
fmt.Printf("(%s) upload...\n", file.Filename)
// 文件上传
filePath := filepath.Join(dirPath, file.Filename)
errors = ctx.SaveUploadedFile(file, filePath)
if errors != nil {
ctx.JSON( http.StatusBadRequest, gin.H{
"code": 400,
"error" : errors.Error(),
})
}
fmt.Printf("(%s) upload end...\n", file.Filename)
wg.Done()
}(file)
}
wg.Wait()
end := time.Since(start)
fmt.Printf("it takes %s\n", end)
ctx.JSON( http.StatusOK, gin.H{
"code": 200,
"msg": "上传成功",
})
}
执行结果:
(文件 4.zip) upload...
(文件 2.zip) upload...
(文件 3.zip) upload...
(文件 1.zip) upload...
(文件 4.zip) upload end...
(文件 2.zip) upload end...
(文件 1.zip) upload end...
(文件 3.zip) upload end...
it takes 713.0408ms
下面是没有使用协程的方式的执行结果:
(文件 4.zip) upload...
(文件 4.zip) upload end...
(文件 3.zip) upload...
(文件 3.zip) upload end...
(文件 2.zip) upload...
(文件 2.zip) upload end...
(文件 1.zip) upload...
(文件 1.zip) upload end...
it takes 730.0474ms
请问各位大佬这是什么原因...