当前位置:  开发笔记 > 编程语言 > 正文

睡眠和等待线程占用多少资源

如何解决《睡眠和等待线程占用多少资源》经验,为你挑选了1个好方法。

我想知道,在java 1.6 x64中让许多线程处于等待状态是多么昂贵.

更具体地说,我正在编写跨越许多计算机的应用程序,并将数据从一个计算机发送到另一个计算机.我觉得为每台连接的机器和任务分别设置单独的线程感觉更舒服,例如1)发送数据,2)接收数据,3)删除时重新建立连接.因此,假设集群中有N个节点,则每台机器将为N-1个邻居中的每个节点设置3个线程.通常会有12台机器,它们来自33个通信线程.

这些线程中的大多数将在大多数时间处于休眠状态,因此出于优化目的,我可以减少线程数并为每个线程提供更多工作.比如,例如.重新建立连接是接收线程的责任.或者通过单线程发送到所有连接的机器.

因此,对于拥有许多睡眠线程是否有任何显着的性能影响?



1> Liedman..:

对于大多数情况,睡眠线程消耗的资源将是其堆栈空间.我认为使用2-threads-per-connection-model类似于你所描述的模型,当连接数量增大时,由于这个原因,会导致很大的可伸缩性问题.

我自己一直处于这种情况,当连接数超过500个连接(大约一千个线程)时,你会遇到很多情况,你会得到OutOfMemoryError,因为线程堆栈的空间使用超过了最大数量单个进程的内存.至少在我们的情况下,这是在32位Windows世界的Java中.我猜你可以调整一些东西并进一步调整,但最后它只是不太可扩展,因为你浪费了大量的内存.

如果您需要大量连接,Java NIO(新IO或其他)是可行的方法,可以在同一个线程中处理大量连接.

话虽如此,你不应该在一个相当现代的服务器上遇到100个线程的问题,即使它可能仍然是浪费资源.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有