当多个进程试图同时写入时,序列化花费的时间太长
本文关键字:序列化 时间 进程 | 更新日期: 2023-09-27 18:08:43
我们在多进程序列化文件时面临性能问题。
问题如下:我们正在创建多个进程(在分布式计算环境中)来执行我们的计算,然后将每个进程的输出记录在一个文件中。主进程使用这些文件,将其合并到内存中并进行进一步的计算。
我们的服务器数量有限。在同一台服务器上可以创建2-3个进程。当这种情况发生时(在同一台服务器上创建了2-3个进程),我们会遇到这样的情况:这些进程试图同时在磁盘上写入'serialize计算文件(文件大小约为80-90 MB)。当这种情况发生时,序列化文件需要大约3m的时间。在正常情况下,这80-90 MB只需要30秒。
我们在性能监视器(和日志计时)中监视了这个场景,并且可以看到,由于2-3个进程同时尝试写入,它花费的时间大约是正常计时的6倍。
任何改善计时(3分钟场景)的建议都是赞赏的。
我们使用。net框架,代码用c#编写。
您可以尝试强制进程写入不同的文件,然后只读取文件夹中的所有文件。例如,您可以使用以下结构
|-C:'experiments'current
|--- output_{UNIQUE_SUFFIX}.bin
|--- output_0.bin
|--- output_1.bin
|--- output_nwvpqnfj.bin
|--- output_jhfjqhfew.bin