解决方案 »
- org.apache.axis.ConfigurationException: No service named XX is available
- 关于hibernate 查询 日期
- 菜鸟问题:java类名更改后出现的错误
- jboss-ejb-3.0_rc9-fd下载
- struts,高手帮帮我撒,谢谢了~!
- 一个在线教学系统,有必要用J2EE来实现吗?
- J2ee应用开发详解这本书怎么样?
- Eclipse3.0.2+Tomcat5.0.28+下的javaBean练习问题
- ejb能不能clone()啊
- 100分求EJB高手指教,救命的啊!
- 请问使用126的邮箱给用户发邮件,为什么发不出去?
- cargo插件部署启动tomcat报错?很诡异!
CPU切不切换我们没法控制,只能提高线程优先级以获取更多的CPU时间。
CPU除了处理java还需要处理N多系统和其他线程,一般而言多线程编程中,在确保内存不溢出的情况下提升线程数是可以提高CPU中签率,也就是能提高你的程序处理数据的速度。
不过,即使没溢出,也不是线程数越大越好,线程切换毕竟需要时间,应该找到瓶颈所在。例如如果大部分线程都在等待同步模块的执行,那么瓶颈就是同步模块,这时候应该减少线程数或者优化同步模块。
调试方式可以用打时间的方式,观察线程在哪个地方执行时间最长,然后找到原因,同时能判断线程数量是大了还是小了。
CPU切不切换我们没法控制,只能提高线程优先级以获取更多的CPU时间。
CPU除了处理java还需要处理N多系统和其他线程,一般而言多线程编程中,在确保内存不溢出的情况下提升线程数是可以提高CPU中签率,也就是能提高你的程序处理数据的速度。
不过,即使没溢出,也不是线程数越大越好,线程切换毕竟需要时间,应该找到瓶颈所在。例如如果大部分线程都在等待同步模块的执行,那么瓶颈就是同步模块,这时候应该减少线程数或者优化同步模块。
调试方式可以用打时间的方式,观察线程在哪个地方执行时间最长,然后找到原因,同时能判断线程数量是大了还是小了。学习
CPU切不切换我们没法控制,只能提高线程优先级以获取更多的CPU时间。
CPU除了处理java还需要处理N多系统和其他线程,一般而言多线程编程中,在确保内存不溢出的情况下提升线程数是可以提高CPU中签率,也就是能提高你的程序处理数据的速度。
不过,即使没溢出,也不是线程数越大越好,线程切换毕竟需要时间,应该找到瓶颈所在。例如如果大部分线程都在等待同步模块的执行,那么瓶颈就是同步模块,这时候应该减少线程数或者优化同步模块。
调试方式可以用打时间的方式,观察线程在哪个地方执行时间最长,然后找到原因,同时能判断线程数量是大了还是小了。
您的讲解让我很受益,我想问的是,
这种监控线程执行时间长短,使用什么工具呢?JMeter?还是JavaMoledy?
首先确定应用是CPU密集型 (例如分词,加密等),还是耗时io( 网络,文件操作等)
CPU密集型:: 最佳线程数等于cpu核心数或稍微小于cpu核心数具体数值要以jvm图形线程监控显示繁忙情况为依据。。耗时io型:: 最佳线程数一般会大于cpu核心数很多倍。。一般是io设备延时除以cpu处理延时,得到一个倍数,我的经验数值是20--50倍*cpu核心数,,具体数值也是要以jvm图形线程监控显示繁忙情况为依据。。保证线程空闲可以衔接上
最佳线程数量也与机器配置(内存,磁盘速度)有关,如果cpu,内存,磁盘任何一个达到顶点,就需要适当减少线程数。。
2./////使用多线程的原因1.防止界面卡死.
提高用户的用户体验
对单核CPU,对客户端软件,采用多线程,主要是 创建多线程将一些计算放在后台执行,而不影响用户交互操作。(用户界面 & 其他计算 并行进行)提高用户的操作性能!2.耗时的操作(io,网络io等)使用线程,提高cpu使用率..
I/O操作不仅包括了直接的文件、网络的读写,还包括数据库操作、Web Service、HttpRequest以及.net Remoting等跨进程的调用。
要是不使用多线程,你回发现cpu使用率很空闲..
3.多CPU(核心)中,使用线程提高CPU利用率
使多CPU系统更加有效
操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
要是不使用多线程,你回发现仅仅一个cpu很忙碌的,其他cpu使用率很空闲..
3.////////////不适用多线程的情况,1.你的代码是cpu密集型,在单核cpu上..
2.单核cpu上,线程的使用(滥用)会给系统带来上下文切换的额外负担。并且线程间的共享变量可能造成死锁的出现。
3.当需要执行I/O操作时,使用异步操作常常比使用线程+同步I/O操作更合适。
此外,我来做一下补充:在JDK、IDE里面,很多都用到了多线程。多线程编程,具体来说,应该说是对程序员的要求提高了,它要求程序员也手动编写多线程的程序。
原因很简单,信息化时代,我们要从各个方面提高程序的性能。而在一般的串行程序执行时,无论是几核处理器,串行程序都是在使用一个处理器。这违背了多核操作系统的初衷,也是对其余资源的浪费。此外,纠正一下你最后的观点:Windows下,资源管理器查看的是的当前用户的进程,而非线程。线程的生命周期很短,我们一般只用线程处理进程中一个简单的功能。
CPU切不切换我们没法控制,只能提高线程优先级以获取更多的CPU时间。
CPU除了处理java还需要处理N多系统和其他线程,一般而言多线程编程中,在确保内存不溢出的情况下提升线程数是可以提高CPU中签率,也就是能提高你的程序处理数据的速度。
不过,即使没溢出,也不是线程数越大越好,线程切换毕竟需要时间,应该找到瓶颈所在。例如如果大部分线程都在等待同步模块的执行,那么瓶颈就是同步模块,这时候应该减少线程数或者优化同步模块。
调试方式可以用打时间的方式,观察线程在哪个地方执行时间最长,然后找到原因,同时能判断线程数量是大了还是小了。
您的讲解让我很受益,我想问的是,
这种监控线程执行时间长短,使用什么工具呢?JMeter?还是JavaMoledy?
线程消纵即逝,用工具不容易监控,用日志反而方便,jMeter只能监控当前资源占用而已,常规工具对消逝的线程是没有记录的,你要找到好宝贝可以贴出来分享。