正在用go写后台,遇到一个场景是这样的:
每个用户在上传新文件时,go都要去删除旧文件,所以我想当用户上传新文件成功之后,就把旧文件的地址放到channel中,然后channel那边创建有三个协程来取出数据并进行删除操作。这个流程没有什么问题。我疑惑的是,我应该创建多大的channel呢,太小了我怕到时候忙不过来出现阻塞,太大了又感觉浪费。还是可以不指定channel的大小,由系统来决定,channel满了系统就自己增加,少了就自己减少,不知道会这样吗?
目前代码如下:
```
var delete_channel = make(chan string,100)
```
这个设计是有问题的,你应该只有设计,一个住协程MG负责select 2个channel,一个是删除的任务,一个是接收空闲的channel。然后若干个worker携程Gn,负责删除文件。MG不停接收需要删除的请求,假如没有空闲的worker,则放入队列,当有空闲的worker,就从队列拿出一个,丢过去删除
#5
更多评论