AIO服务在线上测试有一周时间了吧,现在发现一个问题,通过“任务管理器”查看aio服务的进程可以看出该进程的当前线程数经过几天的运行,在不断的增加:

1. 刚刚启动的时候,线程数在16个左右

2. 经过半天的运行,线程数达到30 - 50个左右

3. 经过几天的运行,线程数一般稳定在100个左右,基本上不再增加,或增加的很慢了。

我检查了一下代码,在AsynchronousServerSocketChannel中使用的是一个固定大小的线程池,所以这个地方不会导致使用的线程数不断的增加。

唯一有可能导致线程数增加的地方就是 AsynchronousFileChannel,由于这个地方使用的线程池是系统默认的,具体是什么类型的线程池,我到现在也不太清楚,我下午试了一下,换成一个固定数量的线程池,经测试发现“任务管理器”中的进程使用的线程数已可以控制在指定的范围里,但同时也发现性能下降了一些(并发数下降了一些),不管我把这个固定的线程池设置为10,还是50,还是100,性能还是上不去,算了,只好又改回原来使用系统默认的线程池吧,不再使用定制的线程池了。

我现在想的是,为什么AsynchronousFileChannel使用的默认线程池不能在系统空闲的时候回收一部分线程?如果遇到大并发的情况下,线程数可能达到500,难道以后这个aio进程就一直保持500个线程?

2012-07-09

AsynchronousFileChannel 使用的默认线程池的疑问的更多相关文章

  1. 不要使用Java Executors 提供的默认线程池

    线程池构造方法 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUni ...

  2. java使用默认线程池踩过的坑(三)

    云智慧(北京)科技有限公司 陈鑫 重新启动线程池 TaskManager public class TaskManager implements Runnable { -.. public TaskM ...

  3. java使用默认线程池踩过的坑(二)

    云智慧(北京)科技有限公司 陈鑫 是的.一个线程不可以启动两次.那么它是怎么推断的呢? public synchronized void start() { /** * A zero status v ...

  4. 了解 .NET 的默认 TaskScheduler 和线程池(ThreadPool)设置,避免让 Task.Run 的性能急剧降低

    .NET Framework 4.5 开始引入 Task.Run,它可以很方便的帮助我们使用 async / await 语法,同时还使用线程池来帮助我们管理线程.以至于我们编写异步代码可以像编写同步 ...

  5. 源码剖析ThreadPoolExecutor线程池及阻塞队列

    本文章对ThreadPoolExecutor线程池的底层源码进行分析,线程池如何起到了线程复用.又是如何进行维护我们的线程任务的呢?我们直接进入正题: 首先我们看一下ThreadPoolExecuto ...

  6. 线程池深入(li)

    java线程池.在jdk5之后为我们提供了线程池,只需要使用API,不用去考虑线程池里特殊的处理机制.jdk5线程池分好多种,固定尺寸的线程池.可变尺寸连接池等.常用的是ThreadPoolExecu ...

  7. 第11章 Windows线程池(3)_私有的线程池

    11.3 私有的线程池 11.3.1 创建和销毁私有的线程池 (1)进程默认线程池 当调用CreateThreadpoolwork.CreateThreadpoolTimer.CreateThread ...

  8. 第11章 Windows线程池(2)_Win2008及以上的新线程池

    11.2 Win2008以上的新线程池 (1)传统线程池的优缺点: ①传统Windows线程池调用简单,使用方便(有时只需调用一个API即可) ②这种简单也带来负面问题,如接口过于简单,无法更多去控制 ...

  9. 由浅入深理解Java线程池及线程池的如何使用

    前言 多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担.线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致Out of Memory ...

随机推荐

  1. 20155325 Exp6 信息搜集与漏洞扫描

    实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 实践内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的 ...

  2. C#Unit单元测试之读取Web.config文件

    长期一来,我们所完成的项目都没有写单元测试,今天我一时兴起,决定给自己写的代码写单元测试,简单的测试代码分分钟完成了,一运行测试,就懵逼了.没能达到我的预期效果,而是出现图1所示错误. 图1:单元测试 ...

  3. datatables.js 简单使用--弹出编辑框或添加数据框

    内容:选中某一条记录,弹出编辑框 环境:asp.net mvc ,  bootstrap 显示效果: 代码: 至于怎么弄多选框,在上一篇博客里已经有说明. 主要用到了bootstrap的模态窗,下面代 ...

  4. SSIS 遍历目录,把文件内容导入数据库

    最近接手一个项目,程序的基本框架是:程序A导出数据,以.tsv格式存储,数据列之间以tab间隔:程序B吃文档,把数据导入到数据库中,并把处理过的文档备份/移动到指定的目录中.为了快速开发,程序B设计成 ...

  5. TICTOC: Header Only C++ Timer

    感觉最近的更新频率略高啊-哈哈- 这次的带来的是一个十分简单便利的C++计时库. 项目地址:https://github.com/miaoerduo/tictoc 欢迎Start和提MR. 项目中有详 ...

  6. docker 学习笔记(2)--doucker file命令

    FROM base       ---- imageRUN                  ---- 执行命令ADD   ---- 添加文件COPY         ---- 拷贝文件CMD    ...

  7. Codeforces Round #546 (Div. 2) E - Nastya Hasn't Written a Legend

    这题是一个贼搞人的线段树 线段树维护的是 区间和a[i - j] 首先对于update的位置可以二分查找 其次update时候的lazy比较技巧 比如更新的是 l-r段,增加的是c 那么这段的值为: ...

  8. EOS开发基础之三:使用cleos命令行客户端操作EOS——关于钱包wallet和账户account

    好了,上一节我们已经讲了关于wallet的一些基础操作,基本了解了怎么去创建一个钱包,怎么去查看钱包.上锁和解锁钱包等,这一节咱们就来开始操作账户account吧. 上一节讲到了每一个account都 ...

  9. python类属性在继承中的修改的影响

    class A(object): x = 1 class B(A): pass class C(A): pass # 通过父类修改类属性,子类继承的类属性也改变 A.x = 3 print(A.x, ...

  10. FPGA千兆位收发器选择指南

    选择合适的千兆位收发器(GT)是通信和实时处理领域尤其需要重点考虑的设计事项,但特定的市场领域可能会存在太多的标准.协议或使用模型.有时针对某一种应用就会涉及到好几种标准,为了选择最适合的千兆位收发器 ...