从一个任务队列中获取任务并发执行,并感知每个任务最终是否成功。类C的伪代码如下:
JobQueue: ["ls", "sleep 10", "python run.py", ......]
```
for( job in JobQueue ) {
pid = fork();
if( pid == 0 ) { // child proc
exec(job.cmd)
} elif ( pid > 0 ) { // father proc
} else { } //error status
}
do {
retpid = waitpid(-1, WHOHANG)
}
```
如上逻辑在Go中如何实现为佳?
Goruntine似乎不适合做多进程的管理和回收,chan的机制适用于goruntine已知可穷举的情况。而syscall里提供的api也比较有限,比如就没有waitpid。os.exec也要挨个wait回收。
有疑问加站长微信联系(非本文作者)