gpt4 book ai didi

java - Java中的并行编程

转载 作者:IT老高 更新时间:2023-10-28 20:51:34 25 4
gpt4 key购买 nike

我们如何在 Java 中进行并行编程?有什么特殊的框架吗?我们怎样才能让这些东西发挥作用?

我会告诉你们我需要什么,认为我开发了一个网络爬虫,它从互联网上爬取了大量数据。一个爬行系统不会让事情正常工作,所以我需要更多的系统并行工作。如果是这种情况,我可以应用并行计算吗?可以举个例子吗?

最佳答案

如果您询问的是纯并行编程,即非并发编程,那么您绝对应该尝试 MPJExpress http://mpj-express.org/ .它是 mpiJava 的线程安全实现,同时支持分布式和共享内存模型。我试过了,发现非常可靠。

1 import mpi.*;  
2
3
/**
4 * Compile:impl specific.
5 * Execute:impl specific.
6 */
7
8 public class Send {
9
10 public static void main(String[] args) throws Exception {
11
12 MPI.Init(args);
13
14 int rank = MPI.COMM_WORLD.Rank() ; //The current process.
15 int size = MPI.COMM_WORLD.Size() ; //Total number of processes
16 int peer ;
17
18 int buffer [] = new int[10];
19 int len = 1 ;
20 int dataToBeSent = 99 ;
21 int tag = 100 ;
22
23 if(rank == 0) {
24
25 buffer[0] = dataToBeSent ;
26 peer = 1 ;
27 MPI.COMM_WORLD.Send(buffer, 0, len, MPI.INT, peer, tag) ;
28 System.out.println("process <"+rank+"> sent a msg to "+ 29 "process <"+peer+">") ;
30
31 } else if(rank == 1) {
32
33 peer = 0 ;
34 Status status = MPI.COMM_WORLD.Recv(buffer, 0, buffer.length, 35 MPI.INT, peer, tag);
36 System.out.println("process <"+rank+"> recv'ed a msg\n"+ 37 "\tdata <"+buffer[0] +"> \n"+ 38 "\tsource <"+status.source+"> \n"+ 39 "\ttag <"+status.tag +"> \n"+ 40 "\tcount <"+status.count +">") ;
41
42 }
43
44 MPI.Finalize();
45
46 }
47
48 }

MPJ Express 等消息传递库提供的最常见功能之一是支持执行进程之间的点对点通信。在这种情况下,属于同一通信器(例如 MPI.COMM_WORLD 通信器)的两个进程可以通过发送和接收消息来相互通信。 Send() 方法的一个变体用于从发送方进程发送消息。另一方面,接收进程通过使用 Recv() 方法的变体来接收发送的消息。发送方和接收方都指定了一个标签,用于在接收方找到匹配的传入消息。

在第 12 行使用 MPI.Init(args) 方法初始化 MPJ Express 库后,程序获取其排名和 MPI.COMM_WORLD 通信器的大小。两个进程都在第 18 行初始化了一个长度为 10 的整数数组,称为缓冲区。发送者进程(等级 0)将值 10 存储在 msg 数组的第一个元素中。 Send() 方法的一个变体用于将 msg 数组的元素发送到接收进程。

发送者进程在第 27 行调用 Send() 方法。前三个参数与正在发送的数据有关。发送缓冲区——缓冲区数组——是第一个参数,后跟 0 (o!set) 和 1 (count)。发送的数据是 MPI.INT 类型,目的地是 1(对等变量);数据类型和目标被指定为 Send() 方法的第四个和第五个参数。最后一个和第六个参数是标签变量。标签用于在接收方识别消息。消息标签通常是特定通信器中特定消息的标识符。另一方面,接收进程(排名 1)使用阻塞接收方法接收消息。

关于java - Java中的并行编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3350459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com