之前做了一个项目,涉及系统IO,因为种种原因不能使用DB来做并发处理,当时就利用变更文件夹名的方式来抢占文件。多个程序同时将一个文件夹重命名,成功的那个就占用当前文件夹并处理,失败的程序重命名下个文件夹,直到成功为止,以此循环。
压力测试也做过了,没有什么问题,最终就上线了。问题出现了,大数据量作业时,极端情况会出现两个程序同时重命名成功的情况。后续经过测试发现同时创建文件(注意这里指的是文件,并不是文件夹,同时创建文件夹没有测试过)永远不会出现同时成功的情况。以同时创建文件的方式实践了好多年,大数量级的数据都处理过,没发现问题。
其中的原因涉及os底层(这里用的是微软操作系统)没有咨询过厂家,或许有意为之或许是bug。
最终总结下:在微软操作系统中通过代码同时将文件夹重命名可能同时成功,不会抛异常;但是同时创建文件永远不会同时成功。在<=win7,<=server 2008 版本测试,后续版本os没有验证,估计也一样