服务调用不当引起的死锁问题
问题场景:
web服务线程池有10个,接口有A B 接口,访问A接口会调用B接口;B接口只有简单逻辑,当超过10个请求访问A时,10个线程池都在A中,并且要请求B,这时由于没有空闲线程,因此对于B的请求进入了排队队列里,这时就形成了死锁
解决方案:
1.增大线程数
2.对于同个线程池的服务,以函数调用的形式,而不是以接口的形式
3…
多线程处理ftp文件
场景:
服务部署在多个机器上,并且不单独把ftp处理的功能单独放到某个机器上有效
当对ftp的文件进行操作时,单线程下是不需考虑冲突问题;当多线程处理时,就要考虑锁的问题,这里用一个简单的方案:就是对文件以重命名的方式进行锁
当找到需要处理的ftp文件时,对文件重命名;可以是加一个时间戳后缀;比如 A.txt文件rename后变为A.txt.yyyyMMdd;重命名成功则继续处理
其他方案:
1.以其他中间件标记锁:redis或者数据库
2.对文件名进行取模,如果文件名含有中文,可以进行base64编码或者其他,然后再进行运算,然后每个机器处理一部分: 两个机器,则对2取模,A机器处理0,B机器处理1的
3…