mina2多线程疑问

问题描述

<div class="iteye-blog-content-contain" style="font-size: 14px">在mina2中,如果在代码中使用了dfcb.addLast("executor", new ExecutorFilter(Executors.newCachedThreadPool()));拦截器,并且开了很多的客户端测试,发现后台的pool-3-thread线程会很多,有时候这个线程过多会出现内存溢出了说不能创建新的线程,最后会把客户端关闭了一部分或者自己停了;如果不加这个拦截器发现后天的NioProcessor会随着时间的增加阻塞总数也不断变大,不知道最后会不会回崩掉?mina2的线程到底该如何设置啊,网上也看了很多资料也了解了上面两种方式配与不配的区别。说一下我的业务:1、接收客户端数据,2、解析数据3、数据入库</div>

解决方案

回答一下问题:如果不加这个拦截器发现后天的NioProcessor会随着时间的增加阻塞总数也不断变大,不知道最后会不会回崩掉?不加拦截器的话,接收客户端数据与业务处理均在IoProcessor引用的线程池里处理,可能会产生阻塞,客户端延迟严重,最终会导致工作队列不断累积,内存不断增长解决办法:通用的做法是修改dfcb.addLast("executor", new ExecutorFilter(Executors.newCachedThreadPool()));将cachedThreadPool修改为有上限的线程池,防止线程无限增长。
解决方案二:
1、首先将Executors.newCachedThreadPool()替换为自定义的ThreadPoolExecutor设置合理的核心线程数、线程总数、采用定长阻塞容器、设置失败策略2、解决接收和处理能力不匹配问题,主要是你接收速度快,处理速度慢,这个是和你业务有关系的,所以还要从业务上优化下

时间: 2024-08-19 11:29:23

mina2多线程疑问的相关文章

多线程-疑问:线程启动之后再设置线程的优先级别,逻辑上是不是有问题?

问题描述 疑问:线程启动之后再设置线程的优先级别,逻辑上是不是有问题? 正在学习多线程,有这样一个疑问:线程启动之后再设置线程的优先级别,逻辑上是不是有问题?求助大神们解答下. 解决方案 没啥问题,相当于动态调整线程优先级.因为线程优先级是影响CPU调度优先级,你修改了,就可以影响下一次CPU的选择.所以可以启动再修改. 解决方案二: 没有问题,但是要注意,如果你启动的时候创建的是实时优先级,那么可能更改优先级的代码得不到及时执行. 解决方案三: 现代操作系统都是多任务抢占式操作系统,系统会随时

关于通过extends实现的多线程疑问

问题描述 我想问问通过extends方法创建的多线程对象1它们操作的是不是同一个单例方法?是的话那如果在一开始判断的时候线程切换了,会不会出现2个线程都判断null而产生2个对象?我试了挺多次都是同一个对象..难道线程有运行先后之分吗?publicclassDemo6{publicstaticvoidmain(String[]args){ThreadTestt1=newThreadTest();ThreadTestt2=newThreadTest();t1.start();t2.start();

c-关于多线程的疑问,求各位大神解答

问题描述 关于多线程的疑问,求各位大神解答 ```using namespace std; DWORD WINAPI Thread_accept (PVOID lParam) { cout<<"进入线程"<<endl; return 0; } int main() { WSADATA wsaData; WSAStartup (MAKEWORD (2, 2) ,&wsaData); HANDLE Thread; Thread = CreateThread

多线程-php单例问题 疑问求解答

问题描述 php单例问题 疑问求解答 A.php <?php class Singleton { private static $instance; private function __construct() { echo "This is ok!rn"; } public static function GetInstance() { if (!(self::$instance instanceof self)) { self::$instance = new self();

java多线程,显示结果有疑问

问题描述 java多线程,显示结果有疑问 package com.ii11; public class ThreadDemo2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub TestThread t = new TestThread(); new Thread(t).start(); for(int i=0; i<3; i++) { System

上下文切换与多线程实现的代价

多线程中的上下文切换 支持多任务处理是CPU设计史上最大的跨越之一.在计算机中,多任务处理是指同时运行两个或多个程序.从使用者的角度来看,这看起来并不复杂或者难以实现,但是它确实是计算机设计史上一次大的飞跃.在多任务处理系统中,CPU需要处理所有程序的操作,当用户来回切换它们时,需要记录这些程序执行到哪里.上下文切换就是这样一个过程,他允许CPU记录并恢复各种正在运行程序的状态,使它能够完成切换操作. 在上下文切换过程中,CPU会停止处理当前运行的程序,并保存当前程序运行的具体位置以便之后继续运

jvm-java锁竞争检测的疑问

问题描述 java锁竞争检测的疑问 看优化的书,上面提到现在JVM对锁进行了优化,有锁竞争,JVM底层先是自旋,再调用底层操作系统的锁,然后现在用看主动上下文切换,和被动上线文切换的差/NCPU*80000/频率 看是否大于百分之5,来判断是否有锁.上下文切换知道是多线程的运行导致,但是不明白主动上下切换,和被动上下文的切换的区别,以及这个公式有为什么这么来?希望懂的大牛解释下哈

蜘蛛/爬虫程序的多线程控制(C#语言)

程序|多线程|控制 在<爬虫/蜘蛛程序的制作(C#语言)>一文中,已经介绍了爬虫程序实现的基本方法,可以说,已经实现了爬虫的功能.只是它存在一个效率问题,下载速度可能很慢.这是两方面的原因造成的: 1.       分析和下载不能同步进行.在<爬虫/蜘蛛程序的制作(C#语言)>中已经介绍了爬虫程序的两个步骤:分析和下载.在单线程的程序中,两者是无法同时进行的.也就是说,分析时会造成网络空闲,分析的时间越长,下载的效率越低.反之也是一样,下载时无法同时进行分析,只有停下下载后才能进行

多线程读写 shared_ptr需要加锁的原因

我在<Linux 多线程服务端编程:使用 muduo C++ 网络库>第 1.9 节"再论 shared_ptr 的线程 安全"中写道: (shared_ptr)的引用计数本身是安全且无锁的,但对象的读写则不是,因为 shared_ptr 有两个数据成员,读写操作不能原子化.根据文档 (http://www.boost.org/doc/libs/release/libs/smart_ptr/shared_ptr.htm#ThreadSafety), shared_ptr 的