fork()来搜索通过一个3D数组的C编程



我刚刚在网上了解了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)。

相关内容

  • 没有找到相关文章

最新更新