基于 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 请问各位大佬这是什么原因...
