package crypto import ( "sync" ) // BatchDecryptResult 批量解密结果 type BatchDecryptResult struct { Index int Plaintext []byte Error error } // BatchDecrypt 批量并行解密 // workerCount 指定并行工作数,如果 <= 0 则使用 CPU 核数 func (e *MessageEncryptor) BatchDecrypt(ciphertexts []string, workerCount int) [][]byte { if e == nil || len(ciphertexts) == 0 { return nil } results := make([][]byte, len(ciphertexts)) // 小批量直接串行处理 if len(ciphertexts) <= 10 { for i, ct := range ciphertexts { if ct == "" { continue } plaintext, err := e.Decrypt(ct) if err == nil { results[i] = plaintext } } return results } // 并行处理 jobs := make(chan int, len(ciphertexts)) var wg sync.WaitGroup // 确定工作数 if workerCount <= 0 { workerCount = 4 // 默认4个并行 } if workerCount > len(ciphertexts) { workerCount = len(ciphertexts) } // 启动 worker for w := 0; w < workerCount; w++ { wg.Add(1) go func() { defer wg.Done() for i := range jobs { ct := ciphertexts[i] if ct == "" { continue } plaintext, err := e.Decrypt(ct) if err == nil { results[i] = plaintext } } }() } // 分发任务 for i := range ciphertexts { jobs <- i } close(jobs) wg.Wait() return results }