Java能做的事Python也都能做,但是为何(企业级)开发项目大多还是会选择Java? 是效率?

2012-09-26 00:01:28 +08:00
 tedd
且Python也是There's only one way to do it,相信多人协作代码的控制也不是问题,此外Python也能跨平台。是因为大型项目一半不用解释型语言,因为效率的考虑吗?
97786 次点击
所在节点    Python
151 条回复
markmx
2012-09-29 13:45:34 +08:00
之前我也是做JAVA的,目前转向了PHP。

第一:Java的人员好招,这个是事实~~ ,无论是企业还是培训 都出来了一大批了(前几年的软件蓝领)
第二:企业级开发。这东西也是针对企业,你给企业说 我们是甲骨文的,微软的。有点电脑知识的都能知道。软件开发方面并不能赚什么钱。那都是磨人的活,说好了 很多都是给企业打包服务器。的直接就是上甲骨文的数据库之类的。硬件随便上。 光这几个渠道流水就够企业玩了。你说你是其他的语言开发。什么流行语言。企业不清楚。不信任。未知领域当然是要听过的好呀。
第三:Java在开发中已经形成了一种标准。很多的东西可以拿来改改就用了。。为什么要重新开发提高成本呢?
raptor
2012-09-29 16:07:46 +08:00
@skywinger 大并发IO……这个真不用比了,Python现在有的是解决方案。gevent已经非常强悍了,我前一阵还测试了一下meinheld,比gevent还强,简单WSGI性能超过Nginx处理静态文件。你只管用JAVA试试好了。
reus
2012-09-29 17:50:24 +08:00
gevent性能再好,也只能说明libevent的性能好,只能说明C的执行效率比java高,跟CPython的执行效率没有多大关系。
比较python和java那就拿pure python和pure java的代码比,拉上C那就是作弊。
webmaster
2012-09-29 19:33:22 +08:00
java公司大,售后好,开发人员多 热闹
python冷门,小众点
jamiesun
2012-09-29 20:40:35 +08:00
@reus +c那是python的权利,没说不允许java作弊。
reus
2012-09-29 22:30:52 +08:00
@jamiesun 我在bash里调用了个C程序,能不能说bash甩java九条街?我写了个能输出“hello world!”的程序,然后加了个叫操作系统的插件,让它能跑在x86的机器上,这个程序是不是很厉害?在python里调用C扩展,能说明python性能很好吗?
jamiesun
2012-09-29 23:05:57 +08:00
@reus python内置的大部分函数都是c函数的封装,你要这么钻牛角尖就没完了。C语言扩展机制做的这么好,这本身是python独特之处。在python手册中,用了大量的篇幅来介绍扩展模块,它本身是python不可分割的一部分。

在java里,jni并不是很重要的,是个半吊子的设计,其中存在不少内存陷阱,大多数情况下java不需要依靠jni来提升性能。

只是孤立比较pytho和java性能,这本来就意义不大,同一个项目,python和java都可以做的百分百符合要求,但是python只需要两个月做,java可能需要一年半载,投入的成本也是相差巨大的。很多人似乎都没注意到这一点。
jmu
2012-09-30 19:25:40 +08:00
skywinger
2012-10-01 00:23:10 +08:00
@jamlesun 我说的就是pure java 和 pure python的性能比较,能要用c来扩展,那好,我们直接比较c和java的性能得了,你实在是太偏激了,无法沟通。
skywinger
2012-10-01 00:27:17 +08:00
另外,我目前就是玩linux c的,c处理通讯的高效其实是和操作系统所提供的底层io control机制是分不开的,抛开这些,其他的就是看语言本身的执行效率来,python也是可以调用系统底层提供的epoll等system call,但是总体而言,在性能上真比不过java。
ivanlw
2012-10-02 15:28:37 +08:00
没用过Java,仅仅发表下我的看法:
听说过Java如果用它的那些框架以后,100个程序员写出来实现同一个效果的代码只有一个版本,但是如果用Python的话,即使用了框架,100个程序员写出来实现同一个效果的版本肯定是非常多种多样的,这样子不利于团队协作和分工,以后增加交接时候的工作量……
总而言之,就是Java适合几百人团P,python适合几个人打游记……相信大多数没有经历过打过几百人团P的人应该都会发出这种疑惑,包括我……
mckelvin
2012-10-03 08:09:43 +08:00
鸡和鸭都是禽类,能比吗?说个我们厂推崇的观点,写Python的大多都是自学的,总体上Python程序员质量比只会写Java的好。Google内部广泛使用Java CPP Python,也可以看出三者各有专长。最后一点,SSH框架算不上Java的优点
jamiesun
2012-10-03 16:24:33 +08:00
@ivanlw "100个程序员写出来实现同一个效果的版本肯定是非常多种多样的"这句话放在ruby上应该是合适,但python恐怕就不是了。python团队更不是游击队,用“飞虎队”形容更合适吧。“百人团”作战的基本上大半都是炮灰。

@skywinger python在不计较性能时是以效率为先的。虽然java性能比纯python高出很多,但是这又有多大意义,顶多不过是学术上的研究罢了。我所有观点都是针对实际应用场景来的,Java的分布式解决方案优势不见有人拿出来说,就只会拿性能开涮了。
raptor
2012-10-03 18:32:22 +08:00
Javaer真是没法说啊。
gevent怎么就不算python了,用的时候又不用写一行C代码,管它后面是调用OS API还是别的C库。JAVA有现成的类似解决方案也可以拿出来比的啊。
单比语言性能有什么意义,如果要这样比,除了汇编,别的语言都不必存在了。

如上面所说,JAVA的优势在于大规模计算方面有成熟的分布式解决方案,这是企业级应用需要的。
reus
2012-10-03 20:32:30 +08:00
我用python写的代码比用java写的多得多,也知道gevent是怎么实现的,所以我才会说,比较java和python,用gevent来做例子是不恰当的。因为它的event loop是libevent实现的,gevent.wsgi.WSGIServer更是直接封装的libevent的http server。至少event loop用python实现,不依赖第三方的C库,只使用标准库,这样才能算是不在语言性能比较里作弊。

比较语言的性能,就仅仅是为了比较语言性能而已。让使用者有个大致的概念,了解在执行效率和开发效率之间有多少权衡的余地。并不是说,一定要使用执行性能好的语言,不是说,执行性能不好,就没有使用价值。说这么多都是为了纠正一些回复者认为的“java慢”这种看法,陈述事实而已,并没有在以单一的性能指标来评判语言的好坏
lvsoft
2012-10-03 21:20:53 +08:00
纯粹为了吐槽而注册的。@skywinger 你要知道python的强大在于它是胶水语言的定位。所以调用C对于python来说是纯天然的,别说调用C了,调用动态库,调用你喜欢的java object都是轻轻松松的。这种情况下你纠结pure Python性能干嘛?没有人会太在乎pure python的性能有多烂,大家也不是用pure python来写code的。
perfectworks
2012-10-03 21:25:49 +08:00
恩,我觉得 java 在企业级开发上的可维护性和可扩展性要比 python 好不少
lvsoft
2012-10-03 21:29:33 +08:00
@reus 如果你觉得用bash调用C写程序很爽的话,你当然可以说bash可以甩java九条街了。事实上几乎没有人来为bash写c扩展。bash只能调用可执行文件,以exec来执行C程序。bash本身作为语言的能力狂弱,连浮点计算都要用bc来算,你一个bash脚本里面要是bc用的多了一点,程序慢的跟死机似的。你这个例子完全就不对。

最后,不知道你们怎么扯到速度上的。企业级应用,CPU都是富裕的,瓶颈在于IO。无视IO只考虑程序本身是跑的快10倍还是慢10倍,压根就没意义。
reus
2012-10-03 22:03:27 +08:00
@lvsoft bash程序慢,那就全部写成C程序,然后bash只负责传参数啊。像python一样,直接实现慢,那就借用C的库,这样就快了。在这个例子里,我把python比喻成bash,本身语言执行不够快,那就借用其他的语言,但这样一来,比较的根本就不是python或者bash本身,而是在比较借用的那个语言。我仅仅是想说明,比较两个语言,不能用这种方式。
如果你认为这种比较没意义,那我们所讨论的就没有交集了,我回复这贴,只是想指出一些回复里的硬伤,如此而已
lvsoft
2012-10-03 22:12:25 +08:00
@reus 问题是这些回复我没觉得有什么硬伤啊。你那样全部用C写才是比的纯C程序呢,gevent的核心loop基于C又没啥问题啊,你毕竟写的是python code,一行C代码都没写啊。python作为胶水语言就是这么用的,或者说python就是为了这种使用模式而设计的。同样是在各自语言框架范围内的解决方案,仅仅因为底层实现不同,凭啥不能对比啊?JVM最终好歹也是用C++实现的,我能说java性能高是用C++作了弊的么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/48721

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX