web程序,多线程,我的理解

08-03-22 oojdon
看了论坛里很多关于多线程的帖子,banq不建议用jsp+javabean来做系统,我在想可不可以到底层去瞧瞧,下面是我的理解,jdon论坛,高手如云,如果有错误望大家指正。

php做的程序为什么简单的就能够支撑高负载?php是过程语言,函数式编程,内存在栈里面分配,某个功能模块执行完之后所占用的内存直接被栈指令就给A了,这样就不会涉及内存等资源管理和控制,asp和php诸如此类,而从asp和php转过来编java这样的OO服务端软件的人如果思维不转变的话,做出来的系统就会出问题,好像php现在OO了,是在堆里面使用内存吗?有多线程吗?不了解,如果有那就得注意了,网上搜索,从asp和php转过来学java的人要重新学习线程和对象的概念,所以有人说“jsp+javabean连100个人同时访问都支撑不住,jsp不如死了算了”的话是因为他也许不知道jsp相对asp和php已经是另外一种编程模型,而这种编程模型将会出现一些问题,这些问题在java世界里面是用模式和框架来解决的。

java是对象语言,我们用它编写基于对象的软件,可是有这样一个现实--下决心的话,用任何语言都能写出垃圾代码,同时,下决心的话,用oo语言可以写过程代码,用过程语言却可以写oo程序,在java里面,对象是在内存堆里面的,堆内存需要我们程序进行管理控制,在C++里面你就不得不写拆构函数来释放它,现在呢?java程序员可以new了之后扔给GC,如果你用swing来写桌面软件,c++的内存泄露噩梦在这里就少做了,可是如果你用java来写web程序,内存问题又得面对的,单例servelt多线程的调用你的业务bean,每次请求在堆里面创建一次,用了之后就留给GC,可是实战发现这样不好,jsp+javabean的问题也就蹦了出来,高手们自己cache解决了这个问题比如jive,高手们深知服务器的线程原理,所以出现了jive这样的纯jsp的优秀软件,而我不是高手但我又知道这样的系统有问题,我该怎么办?使用框架,框架会知道怎么管理你的业务bean,它会代替你去管理内存,线程等资源,那么资源管理有模式吗?框架用了哪些模式?我在《面向模式的软件体系结构》第3卷里面找到了熟悉的caching和pooling,而用到这个模式的框架就是jdonframework和EJB。"在框架中对象池化提高性能以管理无状态bean"在国内的某个软件社区被指为谬论,我用POSA的原文回帖进行指正可是被无情的删除了同时也被禁言了几天,^_^。jdon,潜水久了再去看一些技术书籍感觉某个观点似曾相识,好多思想是在书上写得清清楚楚,为什么还有人争辩?也许我错了,但我相信我的判断,我会用实践去检验。

所以,学java最好学框架,学设计模式,这样就不会停留在语言级别了,感谢banq,教给我很多,让我去勇敢挑战自己的思想。多线程,对象池化,缓存,分布,单例陷阱,getter和setter是有害的,extends的脆弱基类问题,用对象思考,软件生命,话题多多,努力思考中.....

[该贴被oojdon于2008-03-22 01:18修改过]

[该贴被oojdon于2008-03-22 01:34修改过]

         

1
banq
2008-03-24 14:46
总结得不错,真理站在勇于而且善于思考的人这边。cache和Pool是JavaEE的一个基础关,如果这个关不过,做出的东西永远没有性能,现在都已经进入容器语言时代,如果不更新自己的思维和认识,抱著自己的一亩三分地只能走向灭亡。

oojdon
2008-03-24 19:37
>下决心的话,用任何语言都能写出垃圾代码,同时,下决心的话,用OO语言可以写过程代码,用过程语言却可以写OO程序

这段话我是在老外的《设计模式初学者指南》上看到的,这本书的作者曾经在javaworld这个网站上宣传OO,并对很多错误的OO思想进行抨击,惹来了很多谩骂和侮辱。呵呵,原来老外也有扔砖头和被扔砖头的时候。jdon的这种敢骂敢喊敢说真话的精神真的难能可贵啊!旁观高手们在jdon的争辩,好过瘾。

freeren
2008-12-04 23:14
呵呵,关注OOjdon一些日子了,发现进步了很多。说实话有些嫉妒你了,可以在比我还早少走歪路。说来惭愧,做java几年了,今年才开始知道自己浪费了好些时间和走了好些歪路,现在做项目就感觉格格不入,但又无奈。天天加班,很少有时间来系统学习。

呵呵,废话多了,看了你的总结,我也来发表简短看法:

j2ee“其实"就是线程,最终还是要怎么样去管理其内存!

banq
2008-12-08 18:24
>j2ee“其实"就是线程,最终还是要怎么样去管理其内存

正确,当你把你的业务用对象表达,而对象生存空间是内存,对象活动基础是线程,这时这两个关键技术你就用上了。

如果你开发Java 10年了,但是很少碰到缓存和多线程这两个概念,那你是白开发了,还是在用数据库思维。

猜你喜欢
2Go 1 2 下一页