zoukankan      html  css  js  c++  java
  • 线程池的取值(一)与拒绝策略

    public ThreadPoolExecutor(int corePoolSize,
    int maximumPoolSize,
    long keepAliveTime,
    TimeUnit unit,
    BlockingQueue<Runnable> workQueue,
    ThreadFactory threadFactory,
    RejectedExecutionHandler handler)

    先估算一个并发数,(pv/时间段=qps,qps*单线程响应时间=并发数=总qps/单线程qps)即为corePoolSize,*1.2为maximumPoolSize
    workQueue长度=设计响应时间/单线程响应时间*corePoolSize - corePoolSize
    假设每个线程0.1s,可以容忍2s内给客户端返回,
    线程池经qps验算确定为10个线程,0.1秒过10个线程,2s过20*10=200,容量可取200-10,最多2s队列末尾的线程也可以获得执行并返回给客户端

    参考:https://www.cnblogs.com/waytobestcoder/p/5323130.html

    ================================================================================
    jvm内存有限,不可能容纳无限线程,否则内存爆掉,我们需要一定的拒绝策略,首先要拒绝,其次又要保留一定的信息,以便日后分析作出调整

    private static class MyRejectedExecutionHandler implements RejectedExecutionHandler {

    private static Logger LOGGER = LoggerFactory.getLogger(MyRejectedExecutionHandler.class);

    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
    LOGGER.error("thread discard");
    }
    }

    注意,如果是callable get方式,这种情况会导致get无限阻塞,注意设置超时限制

    ==================================================================

    https://www.cnblogs.com/longzhaoyu/p/4539341.html这篇文章比较有意思,里面的拒绝策略:
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
                        if (!executor.isShutdown()) {
                            executor.execute(r);
                        }
                    }

    stack over flow
  • 相关阅读:
    tp5.带标签的缓存 创建和清除 测试
    web消息推送-goesay
    链接生成二维码-PHP
    微信退款
    tp5 日志文件名称问题
    PHP 获取访问来源
    PHP苹果内购二次验证的那些巨坑
    Linux 按时间批量删除文件命令(删除N天前文件)
    利用WkHtmlToPdf,把H5 转成PDF
    phpstorm2018永久激活方法---安装包激活
  • 原文地址:https://www.cnblogs.com/silyvin/p/9339137.html
Copyright © 2011-2022 走看看