我正在尝试使用fork()实现一个简单的迭代搜索功能,以使对未排序数组(可变大小)的线性搜索更加有效。
如果数组足够小,例如小于1000,那么我将不进行分区,而只是迭代地搜索整个数组。
但是,说等于或大于1,000的数组大小需要分成较小的子数组,其中每个子数组不大于250个项目。
我还将处理数组大小不是一个容易整除的数字的情况,例如1777通过整数除以250除以整数,然后搜索数组的其余部分。
考虑到这些事情,出现了两个问题:
我了解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;
}
当数组大小超过1000时如何确定最佳子数组大小?
反复试验-进行一些测量,直到找到合适的方法
我如何利用fork()来使这种迭代搜索的实现效率更高?
使用这些数字(例如1000、2000等),效率不高。数量越大,效率越高,因为线程可以在多个内核上并行运行。