锁定老帖子 主题:一次小项目的思考
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间: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里的线程吧。 |
|
返回顶楼 | |
发表时间:2009-08-23
个人认识大概有4种
1.GC 2.打不用标记的 3.信号处理的 4.用户的 分为两类守护和非守护 上面我说的进程 是指你用LOADRUNNER多开几个JAVA应用进行竞争的意思。 |
|
返回顶楼 | |
发表时间:2009-08-24
最后修改:2009-08-24
cats_tiger 写道 banq就是一教授,纯理论家,估计很久没有实践过项目了。不信你们到jdon上反驳一下banq试试,没说几句就会被河蟹,呵呵。
所谓数据库已死,一看就知道是标题党写的东西,有本事你别用数据库。既然离不开数据库就别说什么已死这样的P话。DDD有它先进的东西,数据库也有屹立不动的原因,这样极端的理论只有愤青和教授能说的出来。 从实践出发才是硬道理,我用Hibernate有4、5年了,确实享受到了它提供的便利,但是正如楼上所说,如果遇到很复杂的查询、统计,或者和用户遗留数据打交道,那么hibernate就没戏了。所以,具体如何应用技术还是要看实际的项目场景和需求。DDD可以在帮助我们按照OO的思想进行建模和需求分析,但是一旦遇到数据量很大或者性能要求很高的场景,那么数据切分、SQL优化、冗余设计等等就派上用场了。 偶也看过,但banq似乎并没有说抛弃数据库。 “所谓数据库已死,一看就知道是标题党写的东西,有本事你别用数据库。”建议你静心看完了再加评论!!!会被人笑的! |
|
返回顶楼 | |
发表时间:2009-08-24
蓝皮鼠 写道 另外我也说个抬杠的话: 这个帖子讨论的人全部老死的时候,估计数据库还活着。 不知道有谁不同意。呵呵 这个说法我同意 |
|
返回顶楼 | |
发表时间: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里的线程吧。 请赐教 因为不懂这方面 希望能够学习学习 |
|
返回顶楼 | |
发表时间: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里的线程吧。 请赐教 因为不懂这方面 希望能够学习学习 大学里面干嘛去了?这已经算是常识了。 |
|
返回顶楼 | |
发表时间: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,强人自己定制,如腾讯,中间的用好,如淘宝 终于认真的把自己的思想表达清楚了,欢迎拍砖 |
|
返回顶楼 | |
发表时间:2009-08-24
最后修改:2009-08-24
发现太多人没读过原文或者说没有理解原文就开始评论,这样即使发表看法也是没有立足点的,人家说的这个,自己误解了去打击人家,却打错了方向,技术人不应该如此浮躁
|
|
返回顶楼 | |
发表时间: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干的。 |
|
返回顶楼 | |
发表时间: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>应用级别分解,大家现好的应用,绝大多数在这个上面做文章 |
|
返回顶楼 | |