首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何合理地估算线程池大小?

线程池的长度取决于未来提交的任务类型和所部署的系统特征。 概述 制定线程池的长度并不是一门精密的科学,需要做的仅仅是避免“过大”和“过小”者两个极端情况。...如果一个线程池过大,那么线程对稀缺的CPU和内存资源的竞争,会导致内存的高使用量,还可能耗尽资源。如果过小,由于存在很多可用的处理器资源却未在工作,会对吞吐量造成损失。...为了正确地制定线程池的长度,需要理解当前的计算环境、资源预算和任务的自身特性。部署系统中安装了多少个CUP?多少内存?任务主要执行的是计算、I/O还是一些混合操作?...估算 一般说来,大家认为线程池的大小经验值应该这样设置:(其中N为CPU的个数) 如果是CPU密集型应用,则线程池大小设置为N+1 如果是IO密集型应用,则线程池大小设置为2N+1 如果一台服务器上只部署这一个应用并且只有这一个线程池...这个公式进一步转化为: 最佳线程数目 = (线程等待时间与线程CPU时间之比 + 1)* CPU数目 刚刚说到的线程池大小的经验值,其实是这种公式的一种估算值。 参考 如何合理地估算线程池大小?

88130

如何合理地估算线程池大小?

来源:蒋小强 , ifeve.com/how-to-calculate-threadpool-size/ 如何合理地估算线程池大小? 这个问题虽然看起来很小,却并不那么容易回答。...那么问题转化为: 如何设计线程池大小,使得可以在1s内处理完20个Transaction?...再来第二种简单的但不知是否可行的方法(N为CPU总核数): 如果是CPU密集型应用,则线程池大小设置为N+1 如果是IO密集型应用,则线程池大小设置为2N+1 如果一台服务器上只部署这一个应用并且只有这一个线程池...,比如下面是我写的一个示例(任务是请求网络数据),其中我指定期望CPU利用率为1.0(即100%),任务队列总大小不超过100,000字节: package pool_size_calculate;...time (nanos): 2952819000 Formula: 4 * 1 * (1 + 2952819000 / 47181000) * Optimal thread count: 256 推荐的任务队列大小为

62551
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何合理地估算线程池大小

    这可能是因为任务本身不太需要访问I/O设备,也可能是因为程序是多线程实现因此屏蔽掉了等待I/O的时间 如果是CPU密集型应用,则线程池大小设置为N+1;(对于计算密集型的任务,在拥有N个处理器的系统上...,当线程池的大小为N+1时,通常能实现最优的效率。...CPU逻辑核数+1 ; 这个1 的原因是:即使当计算密集型的线程偶尔由于缺失故障或者其他原因而暂停时,这个额外的线程也能确保CPU的时钟周期不会被浪费 IO密集型 如果是IO密集型应用,则线程池大小设置为...因为如果划分之后两个任务执行时间相差甚远,那么先执行完的任务就要等后执行完的任务,最终的时间仍然取决于后执行完的任务,而且还要加上任务拆分与合并的开销,得不偿失。...并发下线程池的最佳数量计算 如何合理地估算线程池大小?

    86050

    如何用Python递归地思考问题?

    本文就递归算法介绍如何在Python中实现递归的思想,以及递归在Python中使用时的一些注意事项,希望能够对使用Python的朋友提供一些帮助。...1通俗地认识递归 为了更通俗的解释递归,我们通过一个简单的例子来说明。圣诞节到了,圣诞老人要给4个小朋友发礼物。每年过节,圣诞老人都会将礼物一家接一家的送,直到送完。...现在来正式地介绍一下递归函数的定义。如果一个函数直接或者间接地调用函数本身,那么就是递归函数。 这意味着,函数将不断的调用本身并重复函数的内容,直到达到某个条件才返回一个结果。...所有的递归函数都有着同样的结构,这个结构由两部分组成:基础部分,递归部分。 为了更好地说明这个结构,我们举一个例子说明,来写一个递归函数计算n的阶层(n!): 1. 递归部分:将原始问题(n!)...因此,如果我们在很大的列表上递归地重复用这个复制操作,那么就会对我们的空间和GC效率产生坏的影响。

    2.1K71

    java如何获取一个对象的大小

    但当一个系统的内存有限,或者某块程序代码允许使用的内存大小有限制,又或者设计一个缓存机制,当存储对象内存超过固定值之后写入磁盘做持久化等等,总之我们希望像写C一样,java也能有方法实现获取对象占用内存的大小...How---java怎样获取对象所占内存大小 在回答这个问题之前,我们需要先了解java的基础数据类型所占内存大小。...方式1---通过Instrumentation来获取 这种方法得到的是Shallow Size,即遇到引用时,只计算引用的长度,不计算所引用的对象的实际大小。...如果要计算所引用对象的实际大小,必须通过递归的方式去计算。 查看jdk的代码发现,Instrumentation是一个接口,本来我想的是可以直接定义一个类实现该接口。...我们再回过头来,看我们在通过代码获取对象所占内存大小之前的预估值40。比我们实际算出来的值多了8个字节。

    8.2K70

    链表反转(递归和非递归方式)的正确姿势

    ,首先一直迭代到链尾也就是递归基判断的准则,然后再逐层返回处理到开头。...总结来说,链表翻转操作的顺序对于迭代来说是从链头往链尾,而对于递归是从链尾往链头。 下面我会用详细的图文来剖析其中实现的细节。...1、非递归(迭代)方式 迭代的方式是从链头开始处理,如下图给定一个存放5个数的链表。...首先对于链表设置两个指针: 然后依次将旧链表上每一项添加在新链表的后面,然后新链表的头指针NewH移向新的链表头,如下图所示。...最后一步: 2、递归方式 我们再来看看递归实现链表翻转的实现,前面非递归方式是从前面数1开始往后依次处理,而递归方式则恰恰相反,它先循环找到最后面指向的数5,然后从5开始处理依次翻转整个链表。

    1.4K20

    「类与对象」如何准确获取对象的内存大小?

    class_getInstanceSize 首先,这是一个runtime提供的API,用于获取类实例对象所占用的内存大小,返回所占用的字节数。...说白了,class_getInstanceSize方法就是获取实例对象中成员变量内存大小。...malloc_size 这个函数主要获取系统实际分配的内存大小,具体的底层实现也可以在源码libmalloc找到,具体如下: size_t malloc_size(const void *ptr) {...理解一点即可,这个函数是获取系统实际分配的内存大小。 sizeOf 这个函数大家应该很熟悉,确切的讲,这不是一个函数,就是一个操作符,它的作用对象是数据类型,主要作用于编译时。...应用 学习了上面获取内存大小的工具后,下面这道面试题就能很好的回答了。 一个NSObject对象占用多少内存?

    4.6K10

    Python获取图像大小_如何读取0像素图片

    大家好,又见面了,我是你们的朋友全栈君。...在一张图片中,我们可以获取它的宽和高的像素大小 from PIL import Image image = Image.open('图片的路径') imagePixmap = image.size #...宽高像素 print(imagePixmap) 但是在使用百度OCR进行文字识别的时候,文字识别的图片大小不能超过4M,在自动识别文字的时候,就避免不了读取图片的内存大小,如果是大于4M的话,要对图片进行压缩...,下面是读取图片内存的代码: import os imagePath = os.path.join('图片的路径') imageSize = os.path.getsize('imagePath')...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.3K10

    【递归】——五道经典链表与递归问题的深度解析

    面试题08.06.汉诺塔问题 解题思路: 我们可以使用递归的方法将问题分解为更小的子问题。...void hanota(vector& a, vector& b, vector& c) { int n = a.size(); // 获取初始柱子...接着比较两个链表当前节点的值,选择值较小的节点作为合并结果的一部分,并递归地合并剩余的节点。最终,返回合并后的链表头节点。这种方法确保了新链表的顺序性。...next = mergeTwoLists(l1, l2->next); return l2; // 返回当前节点l2 } } }; 反转链表 递归地反转链表的剩余部分...将当前节点的 next 指针指向递归返回的结果,这样形成新的链表结构。 最终返回 ret,即新的头节点,形成新的成对交换链表。

    7210

    链表----链表中元素的获取、查询和修改

    本节是在上一小节的基础上继续完善我们的链表相关方法的编写,在本节中我们着重对如何获取链表中元素、查询元素以及修改元素进行学习。...一、获取元素 1.关于获取链表中元素的方法的分析 由于我们使用了虚拟头结点,而我们每次都需要从第一个真实节点开始,因此需要首先得到虚拟头结点的下一个节点是谁,然后在此基础上进行遍历工作,相关代码如下:...//获取链表的第index(0-based)个位置的元素 (实际不常用,练习用) public E get(int index) { //合法性判断 if...//获得链表的第一个元素 public E getFirst() { return get(0); } 3.获得链表的最后一个元素 对于该方法页是依靠在get()方法的。...,然后判断给定的元素值与链表中的元素值内容是否相等(equals()方法),若相等则返回true,否则返回false。

    1.2K20

    如何使用jsFinder快速全面地获取目标应用的JavaScript文件

    关于jsFinder jsFinder是一款针对JavaScript文件的数据收集工具,该工具基于Go语言开发,是一个命令行工具,在该工具的帮助下,广大研究人员可以快速扫描目标网页以查找HTML源代码中链接的...该工具支持搜索任何可以包含JavaScript文件的属性,例如src、href和data-main等,并将文件的URL提取到文本文件中。...于想要查找和分析web应用程序使用的JavaScript文件的web开发人员和安全专业人员非常有用。通过分析JavaScript文件,可以了解应用程序的功能,并检测任何安全漏洞或敏感信息泄露。...请求的响应Body中搜索JavaScript文件; 5、参数中指定的文件或名为“output.txt”的默认文件; 6、支持将能够表示程序执行状态的信息打印到命令行窗口或输出文件中; 7、允许程序通过命令参数控制...接下来,运行下列命令即可获取该项目最新版本的源代码: go install -v github.com/kacakb/jsfinder@latest 工具使用 广大研究人员可以使用-h命令查看工具的帮助信息

    62840

    如何能既便宜又快速地获取大数据?

    具体来说,我将讨论如何通过众包获取高质量的数据标签。为开发一个机器学习的智能系统,我们第一步要做的事情就是获得高质量的带标签的数据。 为什么需要众包? 通过众包我们很容易拿到大量的带有标签的数据。...在机器学习里大家经常会说的一句话:更多的数据会打败一个聪明的算法。 如何提高众包数据的质量 众包存在的问题 可是,通过众包获取的数据标签质量或许不高。 只要原因如下: 专业技能。...我们注意到众包远不只是机器学习的问题。众包是个商业行为。众包人员给我们标记数据的时候,我们需要付钱。如何付钱有可能是整个众包数据质量的关键所在。...在众包之前需要很清楚地告诉雇员钱是怎么付的。...我们现在有一个表示子集的大小,全部答对的情况下拿到的总收入是 A,选择的子集越大的话,拿到的钱越少。如果某这个选择的子集没有包含正确的答案,就不给钱。

    1.1K80

    PG获取文件大小的方式

    1、通过元命令获取表文件大小 通过\dt+可以得到该表大小。该元命令会转换成SQL语句去执行,实际上是通过pg_table_size函数进行获取。...该函数调用calulate_table_size(rel)其中rel为表的描述结构Relation。通过这个方式计算表大小包括fsm、vm文件大小,如果有toast索引,还包括toast表大小。...那么具体获取文件大小的方式是什么呢?看calculate_relation_size函数:最终通过stat函数来获取,这个得到的是文件大小,而不是占用磁盘大小。...2、内部计算表有多少页 通过RelationGetNumberOfBlocks只计算表主文件的多少页,调用函数RelationGetNumberOfBlocksInFork进行计算。...= RelationGetNumberOfBlocks(rel);//真实多少页 //pg_class中统计的多少页和多少记录 relpages = (BlockNumber) rel->rd_rel

    1.7K10
    领券