小编h.i*_*h.i的帖子

线程池与许多单独的线程

我正处于一个问题,我无法决定采取哪种解决方案.

这个问题有点独特.让我们这样说,我从网络连续接收数据(每秒2到4次).现在,每个数据都属于不同的组合.现在,让我们调用这些组,group1,group2等.

每个组都有一个专用的作业队列,来自网络的数据被过滤并添加到其相应的组进行处理.

起初我为每个组创建了一个专用线程,它将从作业队列中获取数据,处理它然后进入阻塞状态(使用链接阻塞队列).

但我的大四学生建议我应该使用线程池,因为这样线程不会被阻塞,并且可供其他组处理.

但事实上,数据即时获取的速度足够快,并且线程处理它的时间足够长,因此线程可能不会进入阻塞模式.这也将保证数据按顺序处理(作业1在作业2之前完成),这在汇集时可能不会发生.

我的大四学生也倾向于这样一个事实,即汇集也会为我们节省大量的内存,因为线程已经被淘汰了(我以为他真的想要这个词;)).虽然我不同意这个,因为,我个人认为,汇集与否每个线程都有自己的堆栈内存.除非线程池中有某些我不知道的东西.

最后一件事,我一直认为汇集有助于工作在短时间内出现大量工作.这是有道理的,因为线程生成会导致性能下降,因为初始化线程所花费的时间比执行作业所花费的时间多得多.所以汇集在这里有很多帮助.

但在我的情况下,group1,group2,...,groupN始终保持活着状态.因此,如果有数据,他们仍然会在那里.因此,线程产生不是问题所在.

我的大四学生不相信,并希望我采用汇集解决方案,因为它的内存占用很大.

那么,走哪条路呢?

谢谢.

java multithreading pool pooling spawning

8
推荐指数
1
解决办法
6850
查看次数

Commons Maths:Pearsons Correlation返回NaN.

我正在计算两个数组的相关性.

x = {1,2,3};
y = {1,1,1};
Run Code Online (Sandbox Code Playgroud)

来自apache commons math的PearsonsCorrelation是针对这些数组的NaN返回.即

PearsonsCorrelation corr = new PearsonsCorrelation();
double result = corr.correlation(x, y); //result = NaN.
Run Code Online (Sandbox Code Playgroud)

为什么答案不是0.0?

java

5
推荐指数
1
解决办法
2305
查看次数

Java:使用Disruptor与否..

HY,

目前我正在开发一个程序,它从amq队列获取2个值并对它们执行一系列数学计算.已在我的程序订阅的amq服务器上创建了一个主题,并通过回调(侦听器)接收消息.

现在,只要消息到达,就会从SynchronizedDescriptiveStatistics对象中取出并添加两个值.在每次添加到值列表之后,重新执行整个计算序列(这实际上是需求的一部分).

我现在面临的问题是,由于我使用的是侦听器,因此在计算过程中有时会收到一条或多条消息.尽管SynchronizedDescriptiveStatistics会自行处理所有与线程相关的问题,但它会在锁定或其他内容时立即在其数字列表中添加所有等待值.虽然我的问题是添加一个值,然后对其执行calcls然后再执行第二个值.

我想出的解决方案是在我的程序中使用作业队列(而不是amq队列).通过这种方式,只要计算结束,程序就会在队列中寻找更多的工作并继续相应的工作.

由于我也在寻找效率和速度,我认为Disruptor框架可能对这个问题有好处,并且它针对线程情况进行了优化.但我不确定它是否值得在我的应用程序中实现Disruptor的麻烦,因为常规标准队列可能足以满足我的目的.

我还要告诉你,需要执行计算的数据很多,并且它将继续进行,并且需要在连续方式中每次添加单个值时重复执行整个计算.因此,请记住效率和大量数据,从长远来看,您认为哪些数据有用.

等待回复...

问候.

disruptor-pattern

3
推荐指数
1
解决办法
1194
查看次数

Neo4j蓝图与原生遍历速度..

我正在对neo4j的蓝图和本机实现之间的neo4j遍历速度进行性能测试.我创建了一个1000个节点的图表,每个级别有1个节点,即

O-> O-> O-> O->....-> 0

我使用这个蓝图代码记录了90ms,93ms和79ms(运行3次)的迭代(用于循环代码)时间:

Iterable<Vertex> vertices = testGraph.getVertices();

//Code block which was measured.
for(Vertex vertex : vertices){};
Run Code Online (Sandbox Code Playgroud)

并使用本机代码270ms,268ms和321ms:

Iterable<Node> nodes = Traversal.description().breadthFirst().relationships(CustomRelTypes.LINKED_TO, Direction.OUTGOING).evaluator(Evaluators.all()).traverse(rootNode).nodes();

//Code block which was measured.
for(Node node : nodes){}
Run Code Online (Sandbox Code Playgroud)

我不明白neo4j的蓝图实现是如何更快的.我没有为其中任何一个做过任何特殊配置.deepFirst的时间几乎相同.

是否有人如何加快原生表现以匹配蓝图'.

谢谢.

testing performance neo4j

3
推荐指数
1
解决办法
945
查看次数