我正在努力想出关于特定功能的最佳方式来构建我的程序。
以下是一些细节:
n40w106
、n40w107
、...
n40w106.tif
n41w107.tif
我正在努力解决的是我想确保的这些额外要求:
CS中是否有一些现有的范式或概念可以实现我想要的?
我也对是否有一个可以很好地处理并发的模型感兴趣。 作为参考,我使用 Rust 编程语言。
总而言之,每个文件只能加载一次并且它们在使用时只能保存在内存中的要求意味着您必须提前确定一组都来自同一文件的组。否则你无法同时满足这两个约束。
为了保持顺序,您可以提前创建输出缓冲区。然后,当将输入列表组织为组时,您可以将其索引包含在输入列表中,以便处理该项目的代码可以将其直接写入输出缓冲区中的正确槽中。
最后,将每个组发送到一个线程,在该线程中可以一次性处理单个文件的所有条目。
请注意,由于 Rust 的别名规则,如果没有某种互斥体保护,线程通常无法同时写入缓冲区。但是,您可以通过在输出缓冲区中使用
split_at_mut
来解决此问题,在每个项目上存储单元素可变切片而不是索引。那么就没有别名,并且不需要互斥体。
您还需要使用作用域线程,以便可以将这些可变切片发送到线程。
最后,如果所有线程都成功完成,则返回输出缓冲区。