场景:
cos Java Sdk 上传本地文件报错。在文件比较小的时候正常上传,文件一旦超过百兆就会偶发报错
报错信息如下:
com.qcloud.cos.exception.CosClientException: Upload canceled
at com.qcloud.cos.transfer.UploadMonitor.call(UploadMonitor.java:149)
at com.qcloud.cos.transfer.UploadMonitor.call(UploadMonitor.java:47)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.lang.Thread.run(Thread.java:748)
如果是简单的单线程模型是会有这种问题。但是现在成熟流行的框架 一般是这样设计:将网络IO处理逻辑和事件handler分开。比如java中netty框架,Netty 抽象出两组线程池,BossGroup 专门负责接收客 户端连接,WorkerGroup 专门负责网络读写操作。另外还有个处理消息的NioEventLoop 框架。每个NioEventLoop自带一个seletor网络处理和一个事件处理队列taskQueue。NioEventLoop 内部采用串行化设计,从消息的读取->解码->处理->编码->发送,始终由 IO线程 NioEventLoop 负责。