我如何使用fork来使未排序数组上的线性搜索更有效?

问题描述 投票:1回答:1

我正在尝试使用fork()实现一个简单的迭代搜索功能,以使对未排序数组(可变大小)的线性搜索更加有效。

如果数组足够小,例如小于1000,那么我将不进行分区,而只是迭代地搜索整个数组。

但是,说等于或大于1,000的数组大小需要分成较小的子数组,其中每个子数组不大于250个项目。

我还将处理数组大小不是一个容易整除的数字的情况,例如1777通过整数除以250除以整数,然后搜索数组的其余部分。

考虑到这些事情,出现了两个问题:

  1. 当数组大小超过1000时如何确定最佳子数组大小?
  2. 我如何利用fork()来使这种迭代搜索的实现效率更高?

我了解fork的作用及其返回的内容,以及诸如检查pid的值以更改程序流的基本操作。

下面是我的实现,但是当我开始绘制每个父级和子级的工作时,这样做是没有意义的,因为我宁愿再次让每个子级fork()直到达到分区总数(就像二叉树一样)。 search()只是一个迭代搜索功能。

int start = 0;
int end = partition_size - 1;
int found = -1;
while(end < size){
   pit_t pid = fork();

   if (pid > 0){
       found = search(the_list, start, end, target);
   }
   if (pid  == 0){
       start  = end+ 1;
       end += partition_size;
       found = search(the_list, start, end, target);
   }

   start += partition_size;
   end += partition_size;

}
c arrays search process fork
1个回答
0
投票

当数组大小超过1000时如何确定最佳子数组大小?

反复试验-进行一些测量,直到找到合适的方法

我如何利用fork()来使这种迭代搜索的实现效率更高?

使用这些数字(例如1000、2000等),效率不高。数量越大,效率越高,因为线程可以在多个内核上并行运行。

© www.soinside.com 2019 - 2024. All rights reserved.