我想在未使用的线程效果上清除我的概念。线程池中太多未使用的阻塞线程的总体影响是什么。 假设我有一个包含100个线程的线程池,其中50个未使用并等待请求处理,但请求的到达率为2,因为50个线程处于阻塞状态。
将影响哪些系统资源?
CPU资源会受影响吗?
内存资源会受影响吗?
此方案对线程管理开销有何影响?即线程管理开销只涉及50个正在运行的线程或100个线程的全部?
答案 0 :(得分:1)
将影响哪些系统资源?
内存。每个本机线程都需要一些用于其堆栈。它并不多,我不会关心50个主题。
由于其他原因而被阻止的线程"等待工作"可能是一个更大的问题,因为它可能包含其他资源,包括例如文件描述符,这些资源是有限的。
如果服务器运行许多等待外部资源(文件或数据库访问)的请求,这可能是个问题。
此外,有ThreadLocal
个,可能包含以后可能需要或可能不需要的数据。它甚至可能导致内存泄漏,如here,但这与<空闲)线程的数量完全无关。
CPU资源会受影响吗?
他们为什么要这样?在Java中,它只是一个坐在空闲线程集合中的对象。
内存资源会受影响吗?
见上文。
答案 1 :(得分:-1)
查看有关CPU Scheduling的文章。
正在等待某些中断的线程(由OS或java notify完成)只是位于集合中,并且不参与资源管理。只有处于就绪状态的线程才能获得CPU资源。
受影响的资源可能只能通过锁定,以防线程处于休眠状态(这意味着锁定未被释放)。
不要在物理上可用的线程之上创建太多线程。即使切换TCB比PCB更快,也尽量避免使用{{3}}。具体需求取决于使用JIT,硬件和您自己的实现。