论坛首页 Java企业应用论坛

一次小项目的思考

浏览 52003 次
该帖已经被评为良好帖
作者 正文
   发表时间:2009-08-23  
lyong757 写道
everlasting_188 写道
fjlyxx 写道
everlasting_188 写道
如果你能写出IO和CPU都占用100%的程序,请指教:
1>你是如何观察到的?观察手段
2>你是让你的进程占用完除操作系统以外的cpu和io,请考虑下面几个因素
   a)多核情况下
   b)操作系统也有进程,也要占用cpu和io

不要告诉你在JVM上就可以达到


我说过要靠竞争 比如NIO 你多注册几个无关事件CPU可以达到很高的  正常如果CPU空转情况下 比如WHILE里面没有休眠基本是100的   IO高这块 你只要通过操作系统写缓存的操作达到  一般在操作系统大量频繁写缓存的时候就会发生了 只要你IO操作的数据量够大并且够频繁


请指教:
1>那个版本的jvm支持多核?
2>JVM只是一个进程,怎么保证一个进程将cpu除操作系统运行和切换后的cpu分配到jvm上?



并不是反驳这个观点 只是比较关注 期待中

1.十年前的JVM,可能并不支持多核。
2.这个问题很有意思,既然这么谈,那么聊聊JVM里的线程吧。
0 请登录后投票
   发表时间:2009-08-23  
个人认识大概有4种
1.GC
2.打不用标记的
3.信号处理的
4.用户的

分为两类守护和非守护

上面我说的进程 是指你用LOADRUNNER多开几个JAVA应用进行竞争的意思。
0 请登录后投票
   发表时间:2009-08-24   最后修改:2009-08-24
cats_tiger 写道
banq就是一教授,纯理论家,估计很久没有实践过项目了。不信你们到jdon上反驳一下banq试试,没说几句就会被河蟹,呵呵。
所谓数据库已死,一看就知道是标题党写的东西,有本事你别用数据库。既然离不开数据库就别说什么已死这样的P话。DDD有它先进的东西,数据库也有屹立不动的原因,这样极端的理论只有愤青和教授能说的出来。
从实践出发才是硬道理,我用Hibernate有4、5年了,确实享受到了它提供的便利,但是正如楼上所说,如果遇到很复杂的查询、统计,或者和用户遗留数据打交道,那么hibernate就没戏了。所以,具体如何应用技术还是要看实际的项目场景和需求。DDD可以在帮助我们按照OO的思想进行建模和需求分析,但是一旦遇到数据量很大或者性能要求很高的场景,那么数据切分、SQL优化、冗余设计等等就派上用场了。

偶也看过,但banq似乎并没有说抛弃数据库。
“所谓数据库已死,一看就知道是标题党写的东西,有本事你别用数据库。”建议你静心看完了再加评论!!!会被人笑的!
0 请登录后投票
   发表时间:2009-08-24  
蓝皮鼠 写道


另外我也说个抬杠的话:

这个帖子讨论的人全部老死的时候,估计数据库还活着。

不知道有谁不同意。呵呵


这个说法我同意 
0 请登录后投票
   发表时间:2009-08-24  
murainwood 写道
lyong757 写道
everlasting_188 写道
fjlyxx 写道
everlasting_188 写道
如果你能写出IO和CPU都占用100%的程序,请指教:
1>你是如何观察到的?观察手段
2>你是让你的进程占用完除操作系统以外的cpu和io,请考虑下面几个因素
   a)多核情况下
   b)操作系统也有进程,也要占用cpu和io

不要告诉你在JVM上就可以达到


我说过要靠竞争 比如NIO 你多注册几个无关事件CPU可以达到很高的  正常如果CPU空转情况下 比如WHILE里面没有休眠基本是100的   IO高这块 你只要通过操作系统写缓存的操作达到  一般在操作系统大量频繁写缓存的时候就会发生了 只要你IO操作的数据量够大并且够频繁


请指教:
1>那个版本的jvm支持多核?
2>JVM只是一个进程,怎么保证一个进程将cpu除操作系统运行和切换后的cpu分配到jvm上?



并不是反驳这个观点 只是比较关注 期待中

1.十年前的JVM,可能并不支持多核。
2.这个问题很有意思,既然这么谈,那么聊聊JVM里的线程吧。



请赐教  因为不懂这方面 希望能够学习学习
0 请登录后投票
   发表时间:2009-08-24  
lyong757 写道
murainwood 写道
lyong757 写道
everlasting_188 写道
fjlyxx 写道
everlasting_188 写道
如果你能写出IO和CPU都占用100%的程序,请指教:
1>你是如何观察到的?观察手段
2>你是让你的进程占用完除操作系统以外的cpu和io,请考虑下面几个因素
   a)多核情况下
   b)操作系统也有进程,也要占用cpu和io

不要告诉你在JVM上就可以达到


我说过要靠竞争 比如NIO 你多注册几个无关事件CPU可以达到很高的  正常如果CPU空转情况下 比如WHILE里面没有休眠基本是100的   IO高这块 你只要通过操作系统写缓存的操作达到  一般在操作系统大量频繁写缓存的时候就会发生了 只要你IO操作的数据量够大并且够频繁


请指教:
1>那个版本的jvm支持多核?
2>JVM只是一个进程,怎么保证一个进程将cpu除操作系统运行和切换后的cpu分配到jvm上?



并不是反驳这个观点 只是比较关注 期待中

1.十年前的JVM,可能并不支持多核。
2.这个问题很有意思,既然这么谈,那么聊聊JVM里的线程吧。



请赐教  因为不懂这方面 希望能够学习学习

大学里面干嘛去了?这已经算是常识了。
0 请登录后投票
   发表时间:2009-08-24   最后修改:2009-08-24
蓝皮鼠 写道
引用
请指教:
1>那个版本的jvm支持多核?
2>JVM只是一个进程,怎么保证一个进程将cpu除操作系统运行和切换后的cpu分配到jvm上?


1. 我好像还没有用过不支持多核的jvm。。有谁用过可以告诉我。
2. 一个线程的死循环就可以用一个核或者cpu,也就是让一个核或者cpu到100%,或者说让linux系统的负载+1
   两个线程的死循环就可以用两个核或者cpu,也就是让两个核或者cpu到100%,或者说让linux系统的负载+2
   可以累加。



另外我也说个抬杠的话:

这个帖子讨论的人全部老死的时候,估计数据库还活着。

不知道有谁不同意。呵呵


我来说二句
1>JVM通过操作系统在多核上运行分配到多核上运行和JVM支持多核是二码事,这种方式能达到cpu95%和io95%是梦想。07年sun开发者大会,java老大在上面说开始考虑支持多核(我听的同声传译的)。那个版本的jvm开始支持了,给个地址,我上去看看发布说明。你好像还没有用过不支持多核的jvm?我是火星人?
2>写的死循环,cpu就达到100%?单核吧?那IO呢?我说的是:多核的情况下,cpu和io都超过95%。你那样定义的话,写死循环就是天才了。即使能达到cpu和io都超过95%,也要比较在这种情况下对外提供服务的能力。只有对操作系统非常精通的人才可以达到这个效果,这就是许多人觉得java不可能达到,因为jvm设置的时候就是个折中的产品。
JVM在垃圾回收的时候,io肯定达不到95%,垃圾回收的时候主要在处理内存,就这一点,基本上可以说已经限死了,大家为什么老在痴人说梦。如果你说让jvm使用swap,那么cpu又上不去,如果你自己写的io非常大,在jvm进程中,你的线程难道比垃圾回收的级别还高?我是这样理解的,在我理解的范围内,是绝对不可能


cpu 95%+io 95 %+多核,要考虑到的因素包括:
1>cpu和io的速度是不匹配的,什么时候读io,那些数据在内容中缓冲,什么时候使用内存的数据进行计算
2>多核情况下,算法是非并行的,只能顺序执行,如何将你的算法分解成并行算法,到多核上执行
计算机外设和CPU速度不匹配的创造有:
1>内存
2>cpu级别的各种缓存
3>操作系统级别对内存管理
4>外围设备io的缓冲,例如:硬盘的缓冲
那一个简单,没看出来。


个人觉得:
1>对企业应用来说对于java来说,占用cpu上去就可以了,后台交与数据库,再数据库级别上级别上可以处理掉cpu和io的充分使用的问题
2>对于其他底层的应用,java应该说不是他最适合处理的范围,设计者得本意就不是用来处理这个的,比如:io和图形图像


3>对于数据库,banQ的话别当真,从论坛就看出水平来了。数据库有:通用性数据库,嵌入式数据库,实时数据库,内存数据库,数据库犹如资本主义,我们不能停留在说资本主义剥削,比我们受苦的年代,应该有自己的判断能力和思考能力。问:那个大型网站没有数据库?牛人自己开发,如google,强人自己定制,如腾讯,中间的用好,如淘宝


终于认真的把自己的思想表达清楚了,欢迎拍砖
0 请登录后投票
   发表时间:2009-08-24   最后修改:2009-08-24
发现太多人没读过原文或者说没有理解原文就开始评论,这样即使发表看法也是没有立足点的,人家说的这个,自己误解了去打击人家,却打错了方向,技术人不应该如此浮躁
0 请登录后投票
   发表时间:2009-08-24   最后修改:2009-08-24
JVM在垃圾回收的时候,io肯定达不到95%,垃圾回收的时候主要在处理内存,就这一点,基本上可以说已经限死了,大家为什么老在痴人说梦。如果你说让jvm使用swap,那么cpu又上不去,如果你自己写的io非常大,在jvm进程中,你的线程难道比垃圾回收的级别还高?我是这样理解的,在我理解的范围内,是绝对不可能

首先我同意你说的要CPU和IO要达到很高应该让操作系统去做
1.JVM里面多条线程竞争CPU的时候容易达到100%,这是因为一个下去另一个就上了,他们之间存在对操作系统资源的竞争, 所以一般来说JAVA的东西不容易导致死机 你只要结束虚拟机进程一切就又恢复了。

2.JVM使用swap 这个说法有点不正确吧  操作系统级别的缓存是由操作系统写的 并不是JVM干的。
0 请登录后投票
   发表时间:2009-08-24   最后修改:2009-08-24
fjlyxx 写道
JVM在垃圾回收的时候,io肯定达不到95%,垃圾回收的时候主要在处理内存,就这一点,基本上可以说已经限死了,大家为什么老在痴人说梦。如果你说让jvm使用swap,那么cpu又上不去,如果你自己写的io非常大,在jvm进程中,你的线程难道比垃圾回收的级别还高?我是这样理解的,在我理解的范围内,是绝对不可能

首先我同意你说的要CPU和IO要达到很高应该让操作系统去做
1.JVM里面多条线程竞争CPU的时候容易达到100%,这是因为一个下去另一个就上了,他们之间存在对操作系统资源的竞争, 所以一般来说JAVA的东西不容易导致死机 你只要结束虚拟机进程一切就又恢复了。

2.JVM使用swap 这个说法有点不正确吧  操作系统级别的缓存是由操作系统写的 并不是JVM干的。



swap当然是操作系统管理的,我表达的意思是:
jvm分配大于操作系统的物理内存是唯一的可以让垃圾回收产生大io的方法,当然这种使用方法很垃圾,我是只表示这种垃圾方式也很难产生io 95% + cpu 95%的情况



要充分利用计算机,我觉得有以下几个必要因素:
1>操作系统支持多核是基础
2>你的应用可以并行处理,包括以下几个主题
    <1>系统将应用分解为并行
         a)操作系统支持将你的任务分解为并行,
         b)编译器编译提供将任务分解为并行
         都没有特别大的突破
    <2>应用级别分解,大家现好的应用,绝大多数在这个上面做文章




0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics