twisted是一个强大的异步网络框架,应用的面也非常广,但是没有这几年才出现的Node.js火,社区、文档也是很少可怜
我觉得二者其实在本质上差不多,而且python使用起来还是比较容易一些的

匿名用户

因为,它给了一大部分程序猿幻觉比如前后端统一,脚本也能性能很屌,做Demo搜搜快什么的,但实际上,这仅仅是幻觉罢了……

正是因为这样的幻觉是“看得到”的,又有一个响当当的干爹Google,因此Node的曝光率远高于后端常规语言就不足为奇了。

论速度,你一个带JIT的跟常规脚本语言的虚拟机比,没到数量级差异丢不丢脸?内存各种匪夷所思的占用丢不丢脸?web才和CPython+Gevent一个水平比不过pypy丢不丢脸?
论稳定性,Python十来年的积累,大公司的经验,你一个以桌面系统为目标的V8拿来做工程逗我玩呢?
论代码的管理,Js那种匪夷所思的陷阱还要不要一起玩了?Callback hell?

说白了,前端工程师在普通level这级人数太多了,作出来的东西能看得到,吸引力比埋头在服务器上耕耘的系统工程师要高。技术新人往往是被看得见的先吸引到,但不深入怎么知道系统的严谨?node一出前者觉得自己各种碉堡,觉得System Engineer is die 然后四处宣传,比如你看老子一天撸出个实时web,还带个碉堡的前端实现,看看你们系统工程师,呵呵呵。Full Stack哦,一个socket连接消耗多少内存都算不出来你跟我谈Full Stack?

所以,这就不是浮躁的宣传这是什么?系统工程是很严谨的,打交道的往往不仅仅是代码,最终产出最看重的也不是什么性能,很多设计很多实现最终服务的都是后端系统的稳定性,扩展性等这些跟钱相关的东西,你跑来跟我谈跑循环?循环能赚个锤子?

至于Python的XXX为何不火,Callback早就有Twisted,新生代也有Tornado,Coroutine有Gevent,Actor有Pulsar,VM方面要稳妥CPython,要性能PYPY,要并发Stackless,AIO神马的的选择太多了,你喜欢上啥就有啥,社区要运作要宣传怎么闹,手头的牌太多了有木有。Node没这样的历史包袱,就一个选择,自然全部社区的力量和宣传都可以集中到这上面去,加之低门槛,你看出书都出了多少,不火才不科学。

但是,做工程和火不火有毛关系啊?

bhuztez长期求职

关键是营销做得好。说是因为Twisted有什么不如Node.js的技术缺陷,那都是不客观的。

比如

Node解决这个问题靠的是强制异步IO操作,使得Event driven模型能够高效执行
这个就太想当然了。连node.js的作者都不会这么说。你一定不知道什么叫POSIX吧。按POSIX的定义,一个file descriptor假如对应的是普通文件,不管有任何non-blocking或者async的选项可以设置,它必须block。Node.js也只是在背后开了一个线程池。这种做法和Twisted并没有任何区别,而且比Twisted更糟糕。Twisted实现了线程池的功能,并且暴露API给你用,这样你碰到别的没法异步的地方,你也可以用Twisted的线程池。而Node.js在很长时间内并不打算提供线程池,或者说,Node.js有线程池只是你不会C++罢了。

另外,没有抢占式调度,你还是不可避免地要审查代码。有些代码相比别的代码消耗了太多CPU了,成为了瓶颈。查这个比查有没有调用会block的代码可难多了。Python再没节操,好歹库里也把语言自身的ast暴露出来了,很容易就能写个脚本检查出来了,现成Python代码检查工具不会比JavaScript难用的,JavaScript语言设计就拖后腿了。

原因之一也许是 JS 能方便地在表达式里插函数,你 python 的 lambda 里能放语句么?

只有要把同步写法扭曲成异步写的时候,lambda写起来是否方便才会显得很重要。Twisted有inlineCallbacks,不需要扭曲。

python这种语言要做nodejs的异步的事情,得语言支持cps变换才行

原因是V8那时还远没有yield。就Node.js用没有yield的V8而不用早就有yield的SpiderMonkey这点就可以不用看了。这个选择完全就是为了营销。Python有yield,没必要自己搞什么CPS变换。

tornado

是Tornado让Twisted变得更好了。之前Twisted在Web方面没有花太大精力,导致Twisted.web也就仅仅是能用,远说不上是好用。但是Tornado除了Web部分做的比较好,其他地方都是不如 Twisted的。只要把Tornado的Web部分移植到Twisted上,Twisted的Web也不烂了嘛。就有一个叫cyclone的项目做了这个。我不会告诉你跑分还比原生Tornado要好呢。

-----------------------------------------------------

在Node.js还没起来的时候,Twisted那几个开发者早就知道只能异步很不好,等知道有Erlang这种语言的时候,都开始大力向推荐大家用Erlang了。Node.js刚出来那时候和Erlang比,不,显然就不该做这样的比较。

营销做得好,才是Node.js火起来的关键。

假如你还记得那个多少行写个IRC的slides。大致是这样的,Node.js的作者在拿Event-driven和Apache那种fork子进程方式对比的时候,他是有理有据地指出了Event-driven的优点。但是在讲和其他模式对比的时候,他讲的是感觉。他说要是把那些不能立即返回的操作的调用方式和一般的函数调用区别开,不然会给人以错觉 。这样一来,只能写异步回调就立即变成优点了。把Node.js最致命的缺点都包装成优点了,再没节操地鼓动一帮人去搞一些毫无意义的benchmark,立即就避免了不利的局面。喊口号总是最容易的,事件驱动就是高性能, 库就是包袱,异步回调地狱就是好就是好就是好。就火起来了。

就是这样

刘缙系统编程

在Python增加带返回值的yield前,Twisted代码全是回调,程序结构那是相当的twisted。在Python这个注重代码简明的语言里,Twisted实在是格格不入。大部分Python程序员恐怕没看完deferred就被吓跑了。

而回调对js程序员根本不是个事儿。

匿名用户

首先对于排名第一大谈 nodejs 弱爆了,System Engine 才是吊的人做个冷嘲——真正做 nodejs 的如果不熟悉 v8 引擎和 libuv 其实只能是做作外围吧?而熟悉 v8 和 libuv 的哪一个没有扎实的 System Engine 基础(没个七八年的 C/C++ 项目基础能玩转 v8 和 libuv 的那真是少见了)?然后说出什么搞 nodejs 的人搞不清楚 websocket 消耗多少内存这种话你确定打击面没有太大?难道你身边有一些初级的 nodejs 开发人员给你造成了错觉然后你就优越到没边了?

在这种角度就讨论技术,讨论的根本不是技术,而是自己的偏好,自己的圈子和好恶。调侃下可以,但是真的是一点营养都没有。而那些赞同他的人,我只想问你们真的有研究过 nodejs?

分割线下面是之前的回答。

-----------------------------------------------

 

说 nodejs 只是靠营销的是否太天真了些?当初 nodejs 出来的时候各种 BUG,我简单的测试其大文件传输都会出现各种问题。而同時期的其他阵营早就甩其几条街了。但是为什么却能一直不断发展壮大?难道仅仅靠所谓的营销和忽悠?

如果只孤立的去考虑 nodejs 的异步库到底怎样怎样,实在是太片面了,难道 nodejs 里面就只提供了异步网络 IO?

事实上,nodejs 是提供了一套通用的异步基础设施,使得你可以基于此构建各种异步 API。异步网络 IO 只是其上的一个具体应用。而现在问题里提及的 twisted 实际上在这一点上根本不具有与 nodejs 的可比性!

我选择 nodejs 的原因很大程度上是因为它是 JavaScript 的,这样一来在前后端我可以用同一种语言完成整个项目,这是极大的一个优势!另外,尽管 nodejs 不是唯一的也不是最早的基于 JavaScript 的服务端方案。但是它是同時期性能 JavaScript 阵营里最佳的。

再加上 nodejs 底层的 libuv 设计很简单,非常容易扩展,而且 npm 又那么好用。因此开发效率急速上升。

选择 nodejs 到底为什么,其实到了现在,许多人各自有各自的理由。但许多人都是因为他是基于 JavaScript 的低成本解决方案。

为什么 Node.js 这么火,而同样异步模式 Python 框架 Twisted 却十几年一直不温不火?的更多相关文章

  1. 深入浅出node.js游戏服务器开发1——基础架构与框架介绍

    2013年04月19日 14:09:37 MJiao 阅读数:4614   深入浅出node.js游戏服务器开发1——基础架构与框架介绍   游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的 ...

  2. node.js中对同步,异步,阻塞与非阻塞的理解

    我们都知道javascript是单线程的,node.js是一个基于Chrome V8 引擎的 javascript 运行时环境,注意 node.js 不是一门语言,别搞错了. javascript为什 ...

  3. node.js 使用domain模块捕获异步回调中的异常

    和其他服务器端语言相比,貌似node.js 对于异常捕捉确实非常困难. 首先你会想到try/catch ,但是在使用过程中我们会发现并没有真正将错误控制在try/catch 语句中. 为什么? 答案是 ...

  4. Node.js精进(2)——异步编程

    虽然 Node.js 是单线程的,但是在融合了libuv后,使其有能力非常简单地就构建出高性能和可扩展的网络应用程序. 下图是 Node.js 的简单架构图,基于 V8 和 libuv,其中 Node ...

  5. 《深入浅出Node.js》第3章 异步I/O

    @by Ruth92(转载请注明出处) 第3章 异步I/O Node 的基调:异步 I/O.事件驱动.单线程. Node 不再是一个服务器,而是一个可以基于它构建各种高速.可伸缩网络应用的平台. No ...

  6. node.js通过回调函数获取异步函数的返回结果

    html文件代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  7. Node.js入门教程 第五篇 (Express框架)

    Express框架 Express是适用于Node.js web的框架,提供了大量实用功能,例如路由功能及http功能. Express 框架核心特性: 可以设置中间件来响应 HTTP 请求. 定义了 ...

  8. 《深入浅出Node.js》第4章 异步编程

    @by Ruth92(转载请注明出处) 第4章 异步编程 Node 能够迅速成功并流行起来的原因: V8 和 异步 I/O 在性能上带来的提升: 前后端 JavaScript 编程风格一致 一.函数式 ...

  9. Node.js入门:异步IO

    异步IO     在操作系统中,程序运行的空间分为内核空间和用户空间.我们常常提起的异步I/O,其实质是用户空间中的程序不用依赖内核空间中的I/O操作实际完成,即可进行后续任务. 同步IO的并行模式 ...

随机推荐

  1. hdu 5673 Robot 卡特兰数+逆元

    Robot Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem D ...

  2. SQL查询语句 group by后, 字符串合并

    合并列值 --******************************************************************************************* 表 ...

  3. mongoDB中的ID的生成原则

  4. Yii框架第一步-- 安装

    0.首次安装请看 这里 下面的为非首次安装,不需要token的步骤 1.下载composer 官网下载: https://getcomposer.org/download/ 2.开启PHP的opens ...

  5. winform打开唯一窗体、构造函数传值

    制作登入窗体: 制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体 直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false Form ...

  6. js 返回上一页

    --------2016-6-14 16:37:30-- source:[1]js返回上一页

  7. Python学习笔记5-元组

    元组是用圆括号括起来的,其中的元素之间用逗号隔开 >>> t = 123,'abc',["come","here"] >>> ...

  8. epoll中et+多线程模式中很重要的EPOLL_ONESHOT实验

    因为et模式需要循环读取,但是在读取过程中,如果有新的事件到达,很可能触发了其他线程来处理这个socket,那就乱了. EPOLL_ONESHOT就是用来避免这种情况.注意在一个线程处理完一个sock ...

  9. Android 随想录之 Android 系统架构

    应用层(Application) Android 的应用层由运行在 Android 设备上的所有应用程序共同构成(系统预装程序以及第三方应用程序). 系统预装应用程序包含拨号软件.短信.联系人.邮件客 ...

  10. Android开发面试经——3.常见Java基础笔试题

      Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...