5分 |
|
嗯,我也听过两倍CPU核数的观点,但是不敢苟同。这个应该收到 项目中多线程这块儿比重的影响。 那么,在项目中,如何调试(工具?还是其他的什么思想思路?)性能最优,避免频繁切换线程、竞争资源呢? |
|
10分 |
CPU切不切换我们没法控制,只能提高线程优先级以获取更多的CPU时间。 |
4分 |
学习 |
您的讲解让我很受益,我想问的是, |
|
10分 |
如果你想要固定有多少个线程,建议你用线程池,这个可以避免线程过多导致程序负担加大。。。。API中有方法可以获取当前线程的,可以查查
|
嗯,线程池,也需要设置一个大小,是吧。我现在就是比较迷惑,这个大小确定,可以依靠什么工具,或者思想。 |
|
20分 |
1.确定最佳线程数量
首先确定应用是CPU密集型 (例如分词,加密等),还是耗时io( 网络,文件操作等) CPU密集型:: 最佳线程数等于cpu核心数或稍微小于cpu核心数。。。具体数值要以jvm图形线程监控显示繁忙情况为依据。。 耗时io型:: 最佳线程数一般会大于cpu核心数很多倍。。一般是io设备延时除以cpu处理延时,得到一个倍数,我的经验数值是20–50倍*cpu核心数,,具体数值也是要以jvm图形线程监控显示繁忙情况为依据。。保证线程空闲可以衔接上。。。 最佳线程数量也与机器配置(内存,磁盘速度)有关,如果cpu,内存,磁盘任何一个达到顶点,就需要适当减少线程数。。 2./////使用多线程的原因 1.防止界面卡死. 2.耗时的操作(io,网络io等)使用线程,提高cpu使用率.. 3.多CPU(核心)中,使用线程提高CPU利用率 3.////////////不适用多线程的情况, 1.你的代码是cpu密集型,在单核cpu上.. |
16分 |
对于耗时io型,一个简单的算法::最佳线程数==单个线程的黄色时间块长度(空闲) / 绿色时间块长度(繁忙) * cpu核心数
|
10分 |
线程图形化监控工具:: 可以用jprofile ,,,磁盘队列图形化监控工具:::任务管理器》》资源监视器》》磁盘队列深度
|
楼上的哥们儿,谢了哈
|
|
15分 |
哥们,这个问题有点范,我按照我理解的给你答复下。JAVA语言多线程的实现方式有两种,一种是写继承Thread类的方式,一种是实现Runnable接口的方式。使用java语言编程开启几个线程可以由你自己来定义,另外主方法main是JAVA语言应用程序的入口,JVM会找到这个东西,他也是一个线程,还要附加上JVM中负责垃圾回收的线程,所以运行一个java程序,首先就已经是多线程的了,main和GC,另外定义几个线程,同时运行,就看你了。CPU原来一直是单核的,后来出了双核,现在有了四核,甚至是更多。在单核系统中,虽然实现了多线程,但是实际上还是单线程执行,CPU以极短的时间,在各个线程之间做切换,从最微观的角度来看还是单线程的执行。后来出现了双核系统,貌似是实现了多线程的实际并行,但是具体原理我没有再了解过。总之CPU多了一个核,程序执行速度快了很多。可以使用ctrl+alt+del键查看任务管理器,看一下当前系统启动了那些线程。
|
你的回复很认真,而且我也很认同你的观点,非常感谢,呵呵。 此外,纠正一下你最后的观点:Windows下,资源管理器查看的是的当前用户的进程,而非线程。线程的生命周期很短,我们一般只用线程处理进程中一个简单的功能。 |
|
哥们儿,你的IO耗时型和CPU密集型对我启示很大,非常感谢呀!呵呵 |
|
10分 |
线程消纵即逝,用工具不容易监控,用日志反而方便,jMeter只能监控当前资源占用而已,常规工具对消逝的线程是没有记录的,你要找到好宝贝可以贴出来分享。 |