×

Loading...

这里有一篇讲 await 和 blocking 的,你可以看看和你理解的一样不一样。

https://app.pluralsight.com/guides/understand-control-flow-async-await
Report

Replies, comments and Discussions:

  • 工作学习 / 学科技术 / 我对 nodejs express, nestjs, java spring boot 之类的了解不是很多,但感觉这两年 .net core 发展得远远比那些都好使(open source, linux support, docker/container/cloud friendly, features, performance, tooling etc),但市场占有率还是不是很好,不知为什么。
    • 那些是好东东,市场也大。现在很多年轻人都在用。认识一位大学读了一年就去做的合同工。
    • 前面两个是前端技术,跟.net能比吗?.net有两个缺陷:(1)不太支持unix,(2)出来晚了,java把市场抢了很多
      • express, nestjs 都是 server side fw;.net core fully support linux;.net 2002 年就出了,没比 java 晚几天。
        • 以这两个例子,展开讨论一下我说的生态圈。.net主要做网服后端,但是node还可以做前端,Java可以做android。企业的系统集成,对Java的支持就比.net多太多了。企业的数据平台又大多是基于Java。
        • .net core 2015还是2016才出来,而且刚出来的时候并不好用。
        • 一个本来的前端技术硬要去折腾后端,就像当年Java也要征服前端,搞了applet和GWT,结果都会一样,会碰得头破血流
        • Dot net对Linux的支持就是个笑话:不能说做出hello world就算支持!
        • .net core NOT fully support linux. Only limited linux version supported.
          • lol Linux distros 太多也是 linux 的主要问题之一。
    • 你觉得好使的东西,都是那些stack从开始就有的
      • 但你要是把他们对比一下,会发现 .net core 胜出很多。
        • 如果你对它们都不了解,怎么比较出哪个更好的?主要是你的bias。还有一个软件生态的问题,只有core好没有生态也没有用
          • 不是完全没有了解,但一直只了解皮毛,但最近仔细看了一下,发现很多东西比我想象的还要接近 --- 但感觉 .net core + c# 的实现更优雅便捷,才有此问 --- 我承认我确实有 bias -- 所以才希望听听其他对这几个 fw 都有很深的了解的人的看法。
            • 之所以优雅便捷,是因为.net是后来者,避免了先行者的缺点。但是这点优势远不足以挽回后发劣势。比如一个公司从架构到人员都不是.net体系的,转型意味着巨大的投入。还有就是.net的生态圈太小,一方面.net做不全,另一方面有vendor lock-in的风险
            • 优雅便捷在哪里,举个例子。java的framework很多,这对学的人是不好,但优胜劣汰,java spring现在就很突出。反过来微软就一个公司,程序员没积极性搞很创新的东西。有些东西就是吵,但失掉了先机。
              • 微软的问题在于,硬核程序员写个东西都不会把dot net当成第一平台。一直在微软上做的思维又很容易被套住,从开发环境到操作系统都是微软的,思维放不开
              • generic / await 之类的貌似 java 也都支持了,但 LINQ 还有 bool? 之类的东西貌似还有很多细节 c# 要比 java 方便(作为语言)。作为 fw,用 nodejs/express做项目简直就是 pkg 的灾难。
                • 不过算了,看了看这个帖子的跟帖,看上去还是 religion 之争,细节上没什么意义。
                • 我个人是更喜欢C#,但有时候不是语言之争,而是开发环境和framework之争。
                  • 要说 fw - 用 nodejs + express 基本就是裸奔,实现功能需要疯狂加 packages... nestjs倒是提供了基本功能,但基本上就是asp.net core功能了 --走到这一步干脆用 type safe的.net core 算了,重构无须提心吊胆... 槽点太多...
                    • 差不多嘛,dotnet不过是不管你用不用,预先都加上了。反正我觉得没有啥本质上的不同,实际应用就因为各种原因选择不同罢了。
                • nodejs,python,ruby都是要加pkg的,因为这些语言没有大公司支撑。选择pkg有时候会很麻烦,但这中解释型的语言优势也是很明显的。性能扩展通过C++。C#现在搞到8。0,一家公司说了算,抄了很多别人的东西,程序风格变化很大
                  • 那 java 倒也抄抄啊,连 js 都支持 await async 关键字了... 作为编程语言,java 比 c# 不思进取太多了 --- 问题是这两个都是做企业开发的,又不像 c...
                    • 一件事情有好几种写法,个人认为不是什么好事情。语言应该stable,能不加的东西就不应该加
                      • lol getter / setter / bool? 也就算了,await async 对 code 的简化是现象级的,"能不加就不加" --- 一路 callback? lol
                        • JavaScript这个语言的基础没有打好,据说是一个牛人七天创建的(上帝创世纪?)后来的人拼命打补丁,搞得这个简单的语言越来越复杂,一件简单的事情在语言级别有好几种做法,乘以framework,就搞出了十几种
                          • 这就是所谓的摸着石头过河,在开始的时候还好,后来麻烦越来越多
                          • 改的LISP. 本来就是个很先进的语言.
                            • 如果是个很先进的语言,需要在语言本身上打这么多补丁吗?Java语言诞生到现在语言本身只打了很少的补丁!
                              • Java 在向 Js学习. Java 8 以后的东西,好多都是学Js的.C#也在学js. 比如async/await
                                • java8之前诞生了无数的重量级framework,那些新东西只是是锦上添花,不是必须的,倒是造成了很多混淆。违背了unix的精髓:简洁重用等
                                  • 部分同意. 的确有些不是必须的,但是对开发效率确实有提升.另外 OO跟FP思路本质上就不一样,肯定有互相不顺眼的地方.
                                    • 按照java的unix设计思想,开发效率是IDE的事情,即每个东西只做该它做的事情,并且把它做好,你认为少敲了几个字符就是开发效率高了?哪IDE干什么?还有那些所谓的stream写法,看上去少写了几个字符,但一旦出错,要调试的时候你就知道头疼了!
                                      • 多线程调起来都头大,但是还是要用的.stream parallel 肯定比自己去处理错误要少吧. trade off吧.
                                        • 你理解错了stream style,它像这样:a().b().c(d()),想象一下如何调试吧!
                                          • 学名fluent api/流式调用. 调试方法见link. 这些都是为parallel 服务的.stream 自带多线程,这才是stream的亮点.
                                            In our project we are migrating to java 8 and we are testing the new features of it. On my project I'm using Guava predicates and functions to filter and transform some collections using Collectio...
                                            • 大部分应用都是框架或容器帮你管理多线程,你自己基本不用管,比如spring的transaction缺省情况下只能运行在单线程下。为了一个基本不用管的东西把自己弄得烦死!
                                              • 大数据处理就是必须的,这是Java的另一个主战场,可能比spring战场还大.
                                                • 不见得,比如aws的lambda,aws自动帮你管理几千个进程,你自己只要做好单线程的功能就可以了
                                                  • lambda单线程,node 比java 强.
                                      • FP 天然配合多线程,这是FP的优势.
                    • await/async 的本质还是block的。java里面有compeletablefuture,可以同时支持non-block或者block,看你怎么用。JS是单线程,所以需要await/async来模拟多线程。Java/c#本身就是多线程的。
                      • await/async 的 point 是让 asynchronous code (flow) 象 synchronous code 一样简单 -- 不是说有多线程就不需要 await/async 了。
                        • await/async 的本质还是block的,理解这点再讨论其他。”象 synchronous code 一样简单“只是模拟了多线程,但是并没有解决blocking的问题。
                          • 这里有一篇讲 await 和 blocking 的,你可以看看和你理解的一样不一样。
                            https://app.pluralsight.com/guides/understand-control-flow-async-await
                            • 我上面是指的js里的 await/async。
                            • c#引入await/async 确实是方便了UI类的应用,但是对后台任务同样需要借助Task才能真正efficient,用法上其实和Java completablefuture 几乎一样。可以参考ms async文档,Await tasks efficiently这段。
                              An overview of the C# language support for asynchronous programming using async, await, Task, and Task
    • 因为它只能在windows上跑,虽然这几年微软加大力度想让dot net跨平台,但服务器端基本上还是Linux的天下,而用Linux的人对微软有一种天然的敌意/鄙视
      • .net core 支持 linux 很久了 / win10 里都有 linux 很久了...
        • 但对于Linux原教旨主义者,这是披着Linux马甲的windows。这才是根源
          • lol 一边打一边骂:“让你不支持 linux! 让你不支持 linux!” (一会儿)“让你假装 linux! 让你假装 linux!” ---- 是这个意思吧? 🤣🤣🤣
            • 所以说“原教旨主义”。现在的学生已经好多了,10几20年前招来的学生,提起windows就是dark side。已经融入血液里去了。大陆来的码农因为盗版有理的关系,对微软无感,甚至有一点亲切😂
              • 呵呵,也不一定,俺们自从告别DOS进入Windows时代,就一直认为Windows就是个大黑箱,相比之下,DOS算是几乎透明的OS,用debug就能掌控于手,换到Windows后随着版本的不断更新庞大,黑箱里也愈加漆黑....
    • 说.net好的人都是一直在微软平台上而对open source技术接触很少的人。微软的东西被人看不起是很正常的。比如.net的web forms搞了很多年,最后还得抄MVC。那个sharepoint的思路更是一塌糊涂 +1
      • 从 2017 年起,ms 就已经是最大的 open source contributor了
        • 这个只是market宣传。微软现在做的一切都是为了不让程序员完全倒向Linux。 +1
        • 最大? 微软贡献了什么有价值的open source项目?
          • .net core, TypeScript, rxjs, visual studio code... windows 平台上的就不说了...
            • TypeScript是ECMAScript 2015的实现,vscode是based on atom. rxjs 就更离谱了
            • How We Use RxJS at Netflix 22nd September 2016 in London
              London JavaScript Community community cast. Ben Lesh:
            • .net core,除了微软产品集,有人用么?
              • 他提出一个问题,大家给他回答,但他其实要的不是回答,而是称颂。net。这说明题主并不想去学习别的生态系统。这种想法也很正常。 +1
                • 我本来的问题就是为什么 .net core 吸收了别的生态系统的优点,并改进了很多痛点,为什么还没得到应得的使用率。总的来说,大部分人对微软的偏见应该算是比我对 java / nodejs 的偏见要深一些的。另外,我一直在学习其他生态系统的。
                  • 微软2000年如日中天,那个时候就写程序的多半是从微软平台过来的,并不是什么偏见。微软对VB6和Foxpro,说放弃就放弃,多少公司的赚钱程序就是用它们写的。dot net也一样,现在对Basic的已经停了,哪天微软开始全面推另一种东西也是完全可能的
                    • 如果一个公司plan一个产品,它就得考虑这种生态系统的问题,一个产品代码至少几十万行,公司得考虑代码的稳定性,20年后程序员仍然能维护现在的代码
                  • 还是那句话,.net core才出来多久?按照微软的惯例,版本3之前根本没法用。
                  • 另外,我也和其他同时多个生态系统的人聊过 -- 所以我也能理解有时 pros/cons 是相对的,有时看使用场景/项目大小,还有时候 dev 觉得某个生态系统有 flexibility,但 ta 的 lead 或 arch 觉得那些 flexibility 会带来额外的工作。
                  • 不是偏见. 已经1202年了,linux 实用性已经不需要证明. windows都在上原生的wsl.
                    • 这个没否认啊 --- 我们公司 .net core 生产环境都是在 linux 上跑的 --- 我本来的问题就是微软都这么有诚意了,大家怎么还不用 lol...
                      • 因为可以直接用linux + open source啊. 完全不需要微软.
                        • 微软太贪多贪全,所以搞了很多垃圾出来,然后它就把它们全扔掉,伤了很多人
                          • 微软产品本身还是不错的.主要是贵+封闭.
                      • 如果以前一直没有用dotnet,为啥要换?
                        • 你要是以前用别的生态系统,那确实没必要换。但对 startup 公司来说 -- .net core 也开源,vscode 也可以在 windows / macos / linux 上跑...
                          • startup更是自由选择了呀,选啥的都有,为啥一定要选微软的东东?“也”而已,不是“只有”。
                          • startup第一条就是成本,更不可能用MS. MS也就是银行之类的传统大企业,有钱又不愿意自研的适合.
                            • lol 银行差不多都是 java -- 不过那个我完全能理解(历史由来)...
                              • 大家一阵围攻微软,但其实微软的市场也很大:很多小企业没有能力搞自己的软件,所以买一套office套件,用里面的excel和access做业务,这个市场原来很大,但最近被云端应用挤压
                                • office 365, ms team都是好产品.MS OA还是不错的,但是开发stack是另一回事.
                          • 现在的程序都跑在服务器上,一定要用Windows的原因只有一个,就是一个关键的东西只能在Windows上能用,比如买的一个DLL
                            • 不是一直在说 .net core + linux + docker 么,怎么又绕回 windows 了?如果 ms 还是只支持 windows server 我压根儿不会问这个问题。
                              • 你能确定各种功能Linux也能找的到?如果不能到时候写了一半还得转回windows
                                • Liux上net core写个简单的web server是行的,但如果要调用数据库,图形库要求第三方功能的就不行了
                              • 问题就是,一直对Linux环境有需求的,根本不在乎微软的东东,微软这个.net core在我看来是被逼急了,小手不停的挥,客官别走,他有的咱现在也有了,别走呀…… +1
                                • LOL
      • 跟着吐槽一下那个Sharepoint,估计是哪个三哥的showoff之作
        • 但那个和 .net core 没什么关系啊
          • 我没说和.net core有关系啊,顺着楼上吐槽一下啊
    • 因为.net core的基本就是把open source的产品抄一遍,集成度会更高,但是也更封闭。问题是大家已经用上open source的了,干嘛还掉头去用封闭的产品?
      • 因为 open source package 的自由度太大,有时对商业产品开发是灾难。
        • 从前是这样。MS的产品封装一直优秀,毕竟要收钱。 docker之前MS产品易用性吊打open source.但是docker/k8s以后,open source封装已经反过来吊打MS了。
          • nodejs 随便做个项目需要加近百个 package,安全性和版本兼容性的挑战不是用了 docker 就能解决的 -- 是两个层面的问题。
            • 没有node,有typescript 啥事?node 这么烂,微软为啥还要搞 typescript ?
              • 不是说 nodejs 不好,nodejs 还是有很多应用场景的。另外,就算没有 nodejs 也还有前端的 angular 和 react 可以用到 ts。
                • 没有node 就没有 angular/react了.
                  • node也就帮忙搞一些编译,部署等杂事,没有它也可以做,只是变成了技术碎片:开发一种语言,编译部署另外一种语言
                    • "编译,部署等杂事"......
                      • java有段时间在把其他语言比如jython,groovy,jRuby和scala编译成java字节码,这里编程语言不是java,编译语言是java,你怎么解释?
                        • Java并不需要 jython和scala. 他们选择编译成java 字节码是为了执行方便.
                          • 所以我可以用java语言把typescript编程成java字节码,技术上完全可行,然后用java部署生成的代码,也没有任何技术问题,也可以编译成javascript文件,直接运行在浏览器里面
                            • java 编译成 javacript文件? 搞清除什么叫"编译"再说吧.
                              • 我是简略写法,如果你不懂,我就写全吧:用java语言做一个typescript编译器,用java语言做一个typescript项目管理器和部署器
                            • 可以用跟真正用是两回事. java 再牛,遇到GUI就抓瞎.
                              • 好用和能不能是两回事,我在讨论你的能不能问题:你说没有node就没有angular!其实angular跟node没有任何直接关系!
                                • java 能不能GUI ? 肯定能. 但是Java GUI已经死了,不好用最后就只能被淘汰.
                        • 忘了说还有最近很火的kotlin,也是编译成java字节码
                          • 说明java 势不可挡,周边都这么火. :-)