问题标签 [object-pooling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 对象池的堆栈或链表?
我确信对此的正确答案取决于池对象的类型和工作负载,所以我将详细介绍一下我的实现:
我有一个 ObjectPool 用于汇集长时间运行的命令行进程。这些进程通过标准输入/标准输出进行通信,并执行文件/网络操作。许多任务的完成速度比其他任务快得多,并且可能会很快将进程返回到池中。对池的所有访问都必须是线程安全的。
我的问题是,我是使用 LIFO/Stack 还是 FIFO/ConcurrentLinkedQueue 来管理池更好?我的两面推理:
- 堆栈保持“热”对象在运行,其中资源可能保持缓存/等。更长时间。
- FIFO 在进程之间更均匀地平衡调用,每个进程做的工作更少。谢谢!
java - 休眠和对象池
我有一个类ClassWithDates
(我们称之为“C”),其中包含一个collection of dates
. 我有许多 C 类型的对象和数千/数百万个日期对象,它们通常指的是同一时间。
我想要一个日期对象池,如果在请求的时间内存在一个,则返回一个已经分配的对象。这很简单,但是在使用 Hibernate 时,我不知道该怎么做。
如果我执行“来自 ClassWithDates”的查询,并且延迟获取,Hibernates 会加载 ClassWithDates 类的所有对象和所有子集合,但是,据我所知,它会为集合中的每个元素创建新的日期对象,即使对象相同。
我对使用 Hibernate 进行不可变类的对象池感兴趣。我怎么能实现它?
上面给出的示例是我正在处理的代码的简化。
java - 棋盘游戏 AI 中的对象池化
我被要求创建一个棋盘游戏 AI(该游戏与跳棋非常相似)。到目前为止,我用一个位板完成了 NegaScout 的基本实现,并且在 5 秒内,我可以达到 10 个半层深度。游戏的类别在于 EXPTIME-complete。换句话说,整个宇宙中的运动几乎比原子还多。NegaScout 帮助我减少了这个数字,但我仍然需要处理大量可能的动作。
我的板已经是静态的,具有执行/撤消功能。但是对于每个新的板配置,我都需要生成所有允许的移动,即使我的课程很简单,它也会花费很多时间:
所以我有两个问题。
FIRST = 对象池(在移动中)会提高我的性能吗?
Second = if(FIRST) then 你能告诉我如何实现它吗?(链接和小代码示例将非常感激!!)
javascript - 在原型而非经典 JavaScript 中实现对象池的资源
快速提问(稍微费力地建立起来)....
Douglas Crockford 和 Stoyan Stefanov 在他们的 JavaScript 书籍中都强烈鼓励在实施 JavaScript 项目时远离经典(基于类)范式,并利用其原型设计。
我觉得这很吸引人,因为它看起来像你在类型安全和优化方面的松懈,你应该能够通过灵活性和可维护性来获得(据我了解,这是创建 Self,第一个原型语言的目标)
我需要创建一个对象池系统来控制垃圾收集器,因为我正在尝试为基于 Web 的学习材料创建尽可能接近的“实时”模拟。
我能找到的唯一开放的实现(如详细记录和评论)是 gamecore.js 库 和本教程的一部分。
此实现适用于 class.js - 一个启用经典模拟模式的库,并且在我的项目中使用它需要我使用经典模拟继承。
所以,毕竟,我的问题很简单——有没有人知道一个公开可用的对象池脚本,它没有将类模拟作为其实现的一部分?
(只是为了节省时间,建造这个东西只有两周的时间......)
先感谢您
詹姆士
金史密斯大学
java - 用于序列化的字节数组池
想象一个无状态的 Web 应用程序,它处理许多请求,比如每秒一千个请求。我们在处理周期内创建的所有数据将在结束时立即丢弃。该应用程序将大量使用序列化/反序列化,因此我们在每个请求上创建和丢弃大约 50-200kb。我认为这会给垃圾收集器带来很大的压力,因为 GC 将不得不丢弃大量的短期对象。实现一个字节数组池以将它们重用于序列化/反序列化目的是否有意义?有人有过这样的经历吗?
java - 池化 JAXWS wsimport 服务对象 - 可能吗?
我们正在使用 JAXWS Metro 客户端与第 3 方 .Net Web 服务进行交互。我们需要维护 Web 服务的状态。所以,这就是场景。有几个用户应用程序会调用 Metro 客户端,而 Metro 客户端又会调用 .Net Web 服务。
我已经运行了 wsimport 工具并生成了必要的类。但既然我们必须维护状态,我正在考虑实现服务类的对象池。这样,每个用户应用程序总是与它正在使用的特定服务对象结合。因此,流程将是:
COSServiceImpl -> COSServiceFactory 实例化/维护 COSService(wsimport 生成的服务类将被池化) -> .Net Web 服务。
所以,实现如下。有人有更好的建议吗?想法?
用户应用程序.java
COSServiceImpl.java
COSServiceFactory.java
另外,还有其他地方可以设置请求超时吗?这样做可以吗?使用上面的代码,我不认为我们正在修改端口对象。我还没有对此进行测试,但是请求超时属性会起作用吗?
感谢并感谢您的评论。
维杰·加纳帕蒂
c++ - C 或 C++ 中的任何可克隆对象池实现?
这可能看起来很奇怪,但我会尝试使其合理化。我目前将boost.object_pool与shared_ptr一起广泛使用,最近我遇到了一种情况,我需要对当前程序状态进行快照,以便实现像全面重放/回滚/快进这样的功能。
所以我不想克隆一个对象池以在其他地方使用,这显然不会起作用,因为即使我被 boost.pool 的接口(我不是)允许这样做,也不会有指向块的有效指针在那个新克隆的池中,这将毫无意义。但是我在这里的用例是如果有重播/回滚需求,我想将其“粘贴”回原始池中。
我当然可以手动复制和克隆所有状态、对象和子状态、子对象和子子...然后将它们打包到快照中,并希望一切顺利,但考虑到复杂性,这很容易出错项目已经搞定了,比直接复制内存要慢很多。使用命令模式(或类似模式)来实现撤消重做也是不可能的,因为撤消重做机制不是我的意图。
我只是想知道我是否使用顽固的传统 C 方式再次从头开始执行该项目,并且一个简单的 memcpy(snapshot, all_states, size) 调用几乎可以完成所有工作。
我还有其他选择吗?是否有任何类似 boost.object_pool 的实现允许您克隆底层内存区域?考虑到这种情况,侵入式破解 boost.object_pool 是一个合理的选择吗?
c++ - 在并发数据结构中,什么级别的锁定粒度比较好?
我对多线程很陌生,我有一个单线程数据分析应用程序,它具有很好的并行化潜力,虽然数据集很大,但它并没有接近饱和硬盘读/写所以我想我应该利用现在标准中的线程支持并尝试加快速度。
经过一些研究,我认为生产者消费者是从磁盘读取数据并进行处理的好方法,我开始编写一个对象池,它将成为循环缓冲区的一部分,生产者将数据放入其中,消费者获取数据数据。当我写这门课时,感觉我在处理锁定和释放数据成员的方式上过于细化了。感觉就像有一半的代码在锁定和解锁,并且好像有大量的同步对象漂浮在周围。
所以我带着一个类声明和一个示例函数来找你,还有这个问题:这是否太细粒度了?粒度不够细?考虑不周?
一些解释: First PoolPtr 是一个愚蠢的小指针对象,它存储指针和指针来自的池中的段号。
其次,这都是“模板化”的,但我把这些行拿出来试图减少代码块的长度
第三个 ReadWriteLock 是我使用互斥锁和一对条件变量组合而成的。
python - 内存限制下的对象池
我们使用了许多大型对象。理想情况下,我们希望将它们全部永久地提供给客户端代码,但它们不能一次全部放入物理内存中。所以当我们接近内存限制时,我们需要销毁池中的一些对象(可能,我们将销毁最近最少使用的对象)。(使用磁盘上的虚拟内存等于完全冻结系统。)
具体而言,每个对象的内存在 ~100MB 和 ~10GB 之间变化;我们拥有的 RAM 总量为 32GB。
不幸的是,我们不知道每个对象使用的内存,直到它被创建。因此,我们无法预测任何给定对象是否适合可用的物理内存。
一个好的解决方案是为 Python 内存分配器提供回调函数,并在看到可用物理内存量低于某个阈值时让内存分配器调用它。该回调函数将简单地从池中销毁一个对象,然后返回。虽然一般来说,不能保证内存会立即可用,但在 CPython 中肯定会(它会在引用计数器达到零时释放内存),这可能是我所要求的。
不幸的是,我不知道有什么方法可以让 Python 内存分配器在内存不足时调用提供给它的函数。还有什么我可以做的吗?
我想我可以在后台运行一个单独的线程,并每隔一秒左右检查一次可用内存。如果它发现可用的物理内存少于 5GB,它将开始从池中销毁对象。假设对象销毁的平均速度至少与对象创建的速度一样快,那么 5GB 缓冲不会被用完太多,我们会没事的。这似乎很脆弱;但是这种方法的任何实现想法仍然很棒。
这必须在 Python 3.2 下的 Linux 上工作,但如果也有适用于 Windows 的(可能不同的)解决方案,那就太好了。
注意:三层内存分配在起作用:操作系统、malloc
(C 运行时)和 Python 对象分配器。
android - Android在Andengine中为不同类型的实体实现对象池
我正在为 Android 开发 AndEngine 游戏。在我的游戏中,我必须每秒钟创建不同类型的 Tiles (AnimatedSprite)。我已经做到了。但我在比赛中感到抽搐和滞后。我认为这是由于频繁地分配和取消分配对象。所以我想在我的游戏中实现对象池模式。我当前用于创建 Tile 的代码:
我已经看到了一些在 AndEngine 中使用 ObjectPool 的示例,但它们仅适用于单一类型的实体。我有几种类型的实体要创建。任何指南如何将我当前的场景转换为 ObjecPool 之一?
静态瓷砖池类:
}