标签: pool

Java中String Flyweight实现的最佳替代方案

我的应用程序是多线程的,具有密集的字符串处理.我们正在经历过多的内存消耗,并且分析已经证明这是由于String数据.我认为使用某种flyweight模式实现甚至缓存可以大大节省内存消耗(我知道Strings经常是重复的,尽管我在这方面没有任何硬数据).

我查看了Java Constant Pool和String.intern,但它似乎可能引发一些PermGen问题.

在java中实现应用程序范围的多线程字符串池的最佳替代方法是什么?

编辑:另见我以前的相关问题:java如何实现引擎盖下的字符串的flyweight模式?

java string memory-management pool flyweight-pattern

9
推荐指数
1
解决办法
5712
查看次数

关于Java字符串常量池

这是关于Java字符串常量池.在我的一个程序中,我正在解密数据库的密码并将其存储在字符串中.我听说Java Strings将存储在一个常量池中,它们不会被VM重新启动或加载String Quits的ClassLoader破坏.

如果是这种情况,我的密码将存储在字符串池中.我非常关心这个问题.有没有其他方法来摧毁这些文字或我能做的任何其他事情.

请在此建议,

此致,Sunny.

java string passwords pool constants

9
推荐指数
1
解决办法
2520
查看次数

C中的内存池实现

我在C中寻找一个好的内存池实现.

它应包括以下内容:

  1. 反碎片化.
  2. 超级快:)
  3. 能够在某些标识符下"捆绑"来自不同大小的多个分配,并删除具有给定标识符的所有分配.
  4. 线程安全

c memory memory-management allocation pool

9
推荐指数
1
解决办法
7156
查看次数

java中的字符串POOL

Java有字符串池,因为字符串类的对象是不可变的.

但我的问题是 -

制作String POOL需要什么?

为什么字符串类没有像其他类一样保存自己的值?

内部JVM是否需要一些字符串,或者这是性能优势.如果有,怎么样?

java string pool

9
推荐指数
1
解决办法
3656
查看次数

如何获得Python多处理池剩余的"工作量"?

到目前为止,每当我需要使用时,multiprocessing我都是通过手动创建"进程池"并与所有子进程共享工作队列来完成的.

例如:

from multiprocessing import Process, Queue


class MyClass:

    def __init__(self, num_processes):
        self._log         = logging.getLogger()
        self.process_list = []
        self.work_queue   = Queue()
        for i in range(num_processes):
            p_name = 'CPU_%02d' % (i+1)
            self._log.info('Initializing process %s', p_name)
            p = Process(target = do_stuff,
                        args   = (self.work_queue, 'arg1'),
                        name   = p_name)
Run Code Online (Sandbox Code Playgroud)

这样我就可以在队列中添加东西,这些东西将由子进程使用.然后,我可以通过检查以下内容来监控处理的进度Queue.qsize():

    while True:
        qsize = self.work_queue.qsize()
        if qsize == 0:
            self._log.info('Processing finished')
            break
        else:
            self._log.info('%d simulations still need to be calculated', qsize)
Run Code Online (Sandbox Code Playgroud)

现在我认为这multiprocessing.Pool可以简化很多代码.

我无法找到的是如何监控仍有待完成的"工作量".

请看以下示例:

from multiprocessing import …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing pool process multiprocessing

9
推荐指数
1
解决办法
8082
查看次数

如何使用Python多处理Pool.map在for循环中填充numpy数组

我想在for循环中填充2D-numpy数组,并使用多处理来固定计算.

import numpy
from multiprocessing import Pool


array_2D = numpy.zeros((20,10))
pool = Pool(processes = 4)

def fill_array(start_val):
    return range(start_val,start_val+10)

list_start_vals = range(40,60)
for line in xrange(20):
    array_2D[line,:] = pool.map(fill_array,list_start_vals)
pool.close()

print array_2D
Run Code Online (Sandbox Code Playgroud)

执行它的效果是Python运行4个子进程并占用4个CPU核心,但执行没有完成,并且不打印数组.如果我尝试将数组写入磁盘,则没有任何反应.

谁能告诉我为什么?

python arrays numpy pool multiprocessing

9
推荐指数
2
解决办法
8036
查看次数

Airflow:如何指定资源池的定量使用?

我正在寻找几个开源工作流程调度程序,用于具有异构RAM使用的DAG作业.调度程序不仅应该调度少于最大线程数,还应该将所有并发任务的RAM总量保持在可用内存之下.

在这个Luigi Q&A中,有人解释说

您可以设置配置中可用资源的数量,然后设置任务消耗的资源数量作为任务的属性.这将限制您一次运行n该任务.

在配置中:

[resources]
api=1
Run Code Online (Sandbox Code Playgroud)

在任务代码中:

resources = {"api": 1}
Run Code Online (Sandbox Code Playgroud)

对于Airflow,我无法在其文档中找到相同的功能.最好的方法是在资源池中指定多个可用插槽,并指定任务实例使用资源池中的单个插槽.但是,似乎无法指定任务实例在池中使用多个插槽.

问题:专门针对Airflow,如何指定任务实例的定量资源使用?

resources pool memory-limit luigi airflow

9
推荐指数
1
解决办法
1284
查看次数

好的客户端套接字池

我需要从Java应用程序管理与外部服务器的长时间运行的TCP套接字连接.我正在寻找一个好的套接字池,所以我将能够重新使用套接字.有什么建议吗?

java sockets pool

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

java中的负载均衡线程池

我正在寻找一个负载均衡的线程池到目前为止没有成功.(不确定负载平衡是否是正确的措辞).让我解释一下我试图实现的目标.

第1部分:我有乔布斯,有8到10个单一任务.在6核CPU上,让8个线程并行处理这个任务,这似乎可以提供最佳的性能.当一个任务准备就绪时,另一个任务就可以开始.完成所有十项任务后,完成整个工作.通常,工作在30到60秒内完成.

第二部分:有时,不幸的是,这项工作需要两个多小时.由于必须计算的数据量,这是正确的.坏的是,在job1运行时没有其他工作可以启动(假设所有线程具有相同的持续时间),因为它正在使用所有线程.

我的第一个想法:拥有12个线程,并行允许最多三个作业.但是:这意味着,当只有一份工作时,这项工作就没有完全实现.

我正在寻找一种解决方案,在没有其他工作的情况下为作业1提供全部CPU能力.但是当另一个工作需要在另一个工作时启动时,我希望将CPU功率分配给这两个工作.当第三或第四个工作出现时,我希望cpu电源公平地分配给所有四个工作.

我赞成你的答案......

提前致谢

java multithreading pool threadpool

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

不能泡菜功能

所以我试图通过做一点多处理来加快我的计算时间

我正在尝试使用池工人.

在我的代码的顶部,我有

import Singal as s
import multiprocessing as mp
def wrapper(Channel):
    Noise_Frequincies = []
    for i in range(1,125):
        Noise_Frequincies.append(60.0*float(i))
    Noise_Frequincies.append(180.0)
    filter1 = s.Noise_Reduction(Sample_Rate,Noise_Frequincies,Channel)
    return filter1
Run Code Online (Sandbox Code Playgroud)

然后到时候我用

Both_Channels = [Chan1, Chan2]
results = mp.Pool(2).map(wrapper,Both_Channels)
filter1 = results[0]
filter2 = results[1]
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

Exception in thread Thread-2:
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 808, in __bootstrap_inner
self.run()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 761, in run
self.__target(*self.__args, **self.__kwargs)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 342, in _handle_tasks
put(task)
PicklingError: Can't pickle <type 'function'>: attribute lookup …
Run Code Online (Sandbox Code Playgroud)

python pool multiprocessing

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