我刚刚在网上了解了fork,我理解了子进程和父进程的主要原则,但我仍然有点困惑,我们如何使用fork来更快地搜索3D数组。谁能给一个快速编码的例子来说明它是如何工作的?
谢谢
Fork允许在处理器之间分配计算,从而使程序运行得更快。下面是使用平面数组的示例代码(使用平面数组而不是3d数组更容易理解概念):
int main() {
int i;
int array[] = {0,1,2,3,4,5,6,7,8,9,10};
int findThisNumber = 8;
int pid = fork(); //split into two processes
//the parent return the childs pid
//and the child returns 0
if(pid == 0) { //this is the child
for(i = 0; i < 5; i++) { //scan the first half of the array
if(array[i] == findThisNumber) {
printf("%d found at index %dn", findThisNumber, i);
}
}
} else { //this is the parent
for(i = 6; i < 10; i++) { //scan the second half
if(array[i] == findThisNumber) {
printf("%d found at index %dn", findThisNumber, i);
}
}
}
}
在这个例子中,程序分成两个进程,每个进程搜索数组的一半。我运行了一个相同的程序,数组中有1000000000个元素,下面是次数:
time ./noFork.exe
real 0m0.796s
time ./a.exe
real 0m0.391s
我希望这对你有帮助,如果我还需要澄清什么,请告诉我。
我建议您检查posix线程。不同之处在于线程在同一个进程中工作,所以它们共享地址空间(在我看来,线程之间的数据交换比进程之间的数据交换更快更容易)。为了更快地搜索,您应该将N维数组分成X组(较小的数组-每个线程/进程一个),并将每组N维数据传递给特定的线程(pthread)/进程(fork)。