Tag: 并行处理

并行中值滤波器

所以我一直在研究中值滤波器*(比较顺序到并行,因为我正在学习如何并发编码),但是并行版本无限期地运行以获得大输入(大约100k;它运行得更好)。 实质上,代码接收文件,在给定特定窗口大小的情况下对其进行过滤,然后将其写入新文件。 并行编程的新手,所以当我遇到可能出错的问题时,我有点迷失。 //import everything public class SecondMedianFilter extends RecursiveAction { float[] numbers; static int filter; int window; int length; int lo; int hi; static final int SEQUENTIAL_CUTOFF = 500; float[] outArray; public SecondMedianFilter(float[] numbers, int filter, int lo, int hi) { this.numbers = numbers; this.filter = filter; this.lo = lo; this.hi = hi; length […]

如何在java中调用Method作为后台进程

在我的应用程序中,当用户登录时,我有这个逻辑,它将使用用户拥有的所有符号调用下面的方法。 public void sendSymbol(String commaDelimitedSymbols) { try { // further logic } catch (Throwable t) { } } 我的问题是,由于这个发送符号的任务可以缓慢完成但必须完成,所以无论如何我可以将其作为后台任务吗? 这可能吗 ?? 请分享您的观点。

如何使用java并行流而不是executorThreadsPool?

我想编写一个测试,对我的API执行许多并行调用。 ExecutorService executor = Executors.newCachedThreadPool(); final int numOfUsers = 10; for (int i = 0; i { final Device device1 = getFirstDevice(); final ResponseDto responseDto = devicesServiceLocal.acquireDevice(device1.uuid, 4738); if (responseDto.status == Status.SUCCESS) { successCount.incrementAndGet(); } }); } 我知道我可以使用executorThreadsPool来做到这一点,如下所示: devicesList.parallelStream() .map(device -> do something) 我可以用java8并行流创建它: 我怎么能在一台设备上做到这一点? 这意味着我很少想要获得相同的设备。 像这样的东西: {{device}}.parallelStream().execute(myAction).times(10)

hadoop中的mapreduce距离计算

是否有使用hadoop map / reduce的距离计算实现。 我想计算一组给定点之间的距离。 寻找任何资源。 编辑 这是一个非常智能的解决方案。 我尝试了一些与第一种算法相似的方法,而且我几乎得到了我想要的东西。 我现在并不关心优化程序,但我的问题是dist(X,Y)函数无效。 当我得到减速器上的所有点时,我无法通过迭代器上的所有点并计算距离。 stackoverflow.com上的某个人告诉我,hadoop上的Iterator与普通的JAVA Iterator不同,我不确定。 但是,如果我能找到一种简单的方法来通过我的dist()函数上的迭代器,我可以使用你的第二个算法进行优化。 //This is your code and I am refering to that code too, just to make my point clear. map(x,y) { for i in 1:N #number of points emit(i, (x,y)) //i did exactly like this reduce (i, X) p1 = X[i] for […]

Apache Storm Trident和Kafka Spout Integration

我无法找到正确整合Kafka与Apache Storm Trident的良好文档。 我试着在这里查看以前发布的相关问题,但没有足够的信息。 我想将Trident与Kafka连接为OpaqueTridentKafkaSpout。 以下是目前正在运行的示例代码 GlobalPartitionInformation globalPartitionInformation = new GlobalPartitionInformation(properties.getProperty(“topic”, “mytopic”)); Broker brokerForPartition0 = new Broker(“IP1”,9092); Broker brokerForPartition1 = new Broker(“IP2”, 9092); Broker brokerForPartition2 = new Broker(“IP3:9092”); globalPartitionInformation.addPartition(0, brokerForPartition0);//mapping from partition 0 to brokerForPartition0 globalPartitionInformation.addPartition(1, brokerForPartition1);//mapping from partition 1 to brokerForPartition1 globalPartitionInformation.addPartition(2, brokerForPartition2);//mapping from partition 2 to brokerForPartition2 StaticHosts staticHosts = new StaticHosts(globalPartitionInformation); TridentKafkaConfig […]

并行化快速排序使其变慢

我正在快速搜索大量数据,为了获得乐趣,我尝试将其并行化以加快排序速度。 但是,在它的当前forms中,由于同步阻塞点,multithreading版本比单线程版本慢。 每次我生成一个线程时,我都会对一个int进行锁定并递增它,并且每次线程完成时我都会再次获得锁定和减少,此外还要检查是否还有任何线程仍在运行(int> 0)。 如果没有,我唤醒我的主线程并使用已排序的数据。 我相信有更好的方法可以做到这一点。 不知道它是什么。 非常感谢帮助。 编辑:我想我没有提供足够的信息。 这是octo-core Opteron上的Java代码。 我无法切换语言。 我正在排序的数量适合内存,并且在调用quicksort时它已经存在于内存中,因此没有理由将其写入磁盘只是将其读回内存。 通过“获取锁定”我的意思是在整数上有一个同步块。

Java Fork-Join(Java 8)中出现意外的可伸缩性

最近,我使用Java Fork-Join运行了一些可扩展性实验。 在这里,我使用了非默认的ForkJoinPool构造函数ForkJoinPool(int parallelism) ,将所需的并行性(#workers)作为构造函数参数传递。 具体来说,使用以下代码: public static void main(String[] args) throws InterruptedException { ForkJoinPool pool = new ForkJoinPool(Integer.parseInt(args[0])); pool.invoke(new ParallelLoopTask()); } static class ParallelLoopTask extends RecursiveAction { final int n = 1000; @Override protected void compute() { RecursiveAction[] T = new RecursiveAction[n]; for(int p = 0; p < n; p++){ T[p] = new DummyTask(); […]

有没有办法强制parallelStream()并行?

如果输入大小太小,则库会自动序列化流中映射的执行 ,但此自动化不会并且不能考虑映射操作的重要程度。 有没有办法强制parallelStream()实际并行化CPU 重图?

multithreading和递归一起

我有递归代码,以深度优先的方式处理树结构。 代码基本上如下所示: function(TreeNode curr) { if (curr.children != null && !curr.children.isEmpty()) { for (TreeNode n : curr.children) { //do some stuff function(n); } } else { //do some other processing } } 我想使用线程来加快完成速度。 大部分时间都花在遍历上,所以我不想只创建一个线程来处理“其他处理”,因为它不需要那么长时间。 我想我想在“做一些事情”时分叉线程,但是它会如何工作?

JVM退出后,守护程序线程如何生存?

我正在阅读有关Java的setDaemon()方法的文档,当我读到JVM退出而不等待守护程序线程完成时,我感到很困惑。 但是,由于本质上守护程序线程是Java Thread ,它可能依赖于在JVM上运行来实现其function,如果JVM在守护程序线程完成之前退出,守护程序线程如何能够存活?