作业6:Rust中的多线程MapReduce作业6:Rust中的多线程MapReduce周日晚上11:59点50点提交文件上传可在5月23日上午8点之后开始作业简介在本作业中,您将编写一个程序,让您熟悉写作Rust中的多线程程序。学习成果用Rust编写简单程序(模块9,MLO2)编译、调试、管理和运行Rust程序(模块9,MLO3)解释Rust提供的线程工具(模块10,MLO2))MapReduce根据维基百科关于MapReduce的文章MapReduce是一种编程模型和相关实现,用于在集群上使用并行、分布式算法处理和生成大数据集。MapReduce程序由map过程组成,该过程执行过滤和排序(例如如按名字将学生排序到队列中,每个名字一个队列)和一个reduce方法,它执行汇总操作(例如作为计算每个队列中的学生人数,产生姓名频率)。说明对于此作业,我们为您提供单线程Rust程序处理输入数字以产生总和。该程序包含大量注释,这些注释解释了功能并指导您可以更改代码的哪些部分(查找以CHANGECODE开头的注释)。作业6:Rust中的多线程MapReduce这里是程序的描述:目前main()函数执行以下操作:为程序的其余部分生成数据调用generate_data()生成一个数字向量,作为程序其余部分的输入。分区数据调用partition_data_in_two()将输入数字分成两个分区执行映射step为两个分区中的每一个分区调用map_data(),它返回该分区中所有数字的总和。执行reducestepGathers中间结果每次调用map_data()产生的调用reduce_data()将map步骤产生的中间结果相加,以产生所有输入数字的最终总和。您必须修改程序以完成以下任务:修改程序以创建2个线程,每个线程同时在给定程序创建的两个分区之一上运行map_data()函数。为函数partition_data()添加代码,根据参数num_partitions将数据划分为大小相等的分区,如果是num_elements不是num_partitions的倍数,一些分区可以比其他分区多一个元素将代码添加到函数main()以将数据分区为大小相等的分区创建与分区数一样多的线程,并让每个线程同时运行map_data()functiontoprocessonepartitioneach收集每个线程返回的中间结果运行reduce步骤来处理中间结果评估结果并产生最终结果请参阅提供的程序中的详细注释,了解如何进行所需的更改。示例用法这里是该程序的一些示例执行。该程序的执行具有5个分区和150个元素。作业6:Rust中的多线程MapReduce由于元素个数是分区个数的倍数,所以要求每个分区的元素个数相同,但是没有要求哪个元素放到哪个分区。因此,您的解决方案中的中间总和可能与下面显示的不同。/main5150分区数=2分区大小0=75分区大小1=75Intermediatesums=[2775,8400]Sum=11175分区数=5分区大小0=30个分区大小1=30个分区大小2=30个分区大小3=30个分区大小4=30个中间和=[435,1335,2235,3135,4035]Sum=11175An执行具有6个分区和150个元素的程序../main6150分区数=2分区0的大小=75分区1的大小=75中间总和=[2775,8400]Sum=11175分区数=6分区0的大小=25的大小partition1=25sizeofpartition2=25sizeofpartition3=25sizeofpartition4=25sizeofpartition5=25Intermediatesums=[300,925,1550,2175,2800,3425]Sum=11175执行程序有5个分区和153个元素。在这个例子中元素的数量不是分区数量的倍数。基于一些分区可以比其他分区多一个元素的要求,在这种情况下3个分区必须有31个元素,2个分区必须有30个elements.Assignment6:Rust中的多线程MapReduce在下面的示例中,具有31个元素的3个分区位于分区向量中的位置0、1和2,具有30个元素的2个分区位于p该向量中的位置3和4。但是,对于比其他分区多一个元素的分区在分区向量中出现的顺序没有要求。因此,您的解决方案中的分区顺序可能与下面显示的不同。/main5153分区数=2分区0的大小=76分区1的大小=77中间总和=[2850,8778]总和=11628分区数=5sizeofpartition0=31sizeofpartition1=31sizeofpartition2=31sizeofpartition3=30sizeofpartition4=30Intermediatesums=[585,1486,2387,3135,4035]Sum=11628Hints函数thread::spawn()返回JoinHandle
