主要分析一下这个类库 , 以后自己写或者使用的时候就能得心应手了 , 而且这个类库也算是创建goroutine , 通过channel通信的经典写法吧1.New方法调用的时候 , 会创建buffer个ch channel , worker个goroutine.由于ch是空的 , worker个goroutine会阻塞住 , 一直等待有程序往ch里面写入数据2.Do函数一但被调用 , 会传入异步任务的func , func就会写入到ch里面了 , goroutine就可以从ch里面读取到数据 , 并且执行这个数据里面的func践行了这个原则不要通过共享内存来通信,要通过通信来共享内存
有个需要注意的点 , 就Do函数在执行代码是这样的代码里面可以看到在c.ch 写入数据的时候 , 如果超过c.ch的长度(测试代码里面是1024)就报错返回了 , 这样就不能保证每个异步任务都能稳定执行了 , 这样的结果就是 , 如果程序处理慢或者异步任务数量比较多的话(超过1024) , 异步任务就无法完成 。当然了 , 我们也可以修改代码改成等待ch的里面数据被goroutine处理的小于1024了 , 也会执行 , 这样就变成一个不可控的程序了 , 如果有3000个异步任务没人知道执行完成需要多长时间 , 然后我们程序如果重启的话 , 是等待它完成重启还是强制重启 , 等待完成不知道需要等待多长时间 , 强制重启就无法保证任务能够全部完成 。
最终方案为了一定能够在任何异常情况算出分数和生成报告 , 最后使用消息队列做了这件事 , 发送完成答卷的消息 , 接收到完成答卷的消息之后算出分数生成报告 。做完之后虽然保证了可靠性 , 但是觉得自己发消息自己收消息确实也很别扭 。不知道其他童鞋有没有更好的更合理的方案 。
经验总结扩展阅读
- 松下和lg电视哪个好 看完你会倾向谁
- 西瓜和羊肉隔多长时间食用
- 驾校考完科目二还能退款吗
- 三十七 Java开发学习----SpringBoot多环境配置及配置文件分类
- 🔥支持 Java 19 的轻量级应用开发框架,Solon v1.10.4 发布
- 案例分享-https证书链不完整导致请求失败
- 怎么判断烟弹用完了
- 做完拔丝苹果的锅如何清洗
- 单摆怎么运动算一个周期
- 热门完结小说