网站新闻 城市直达 租车经历 客户留言 网站地图 车辆预订
北京租车热线:010-64005861
 
北京租车
北京租车网 即日起,接送送机有优惠,请来电咨询!
车型介绍
大巴系列
中巴系列
商务系列
轿车系列
企业长租
机场接送
会展用车
 
北京租车北京租车 北京租车北京租车
 主页 > 商务系列 >
同样是巨头的语言为什么中国是Go最热的国家而C越来越少
北京租车
时间
2019-12-29 06:42:20
点击数
531

 

泻药Google真正推出的面向开发者的语言是Dart,而且做了不少配套设施,比如Flutter,类似的苹果的面向开发者的语言是Swift,而且配套了SpriteKit,SwiftUI等c#越来越少原因也很简单,desktop每况愈下,mobile才是future,这个只要是正常人都能看出来,desktop的一亩三分地还能守多久,很难说的,反正现在苹果和Google都在融合mobile和desktop,等mobile那一套技术真的杀过来了,现有desktop这些东西能否守得住,嗯,估计很难因为mobile有着巨大的客群和市场,现在做软件,基本上都是mobile优先,desktop比起来,属于夕阳市场,所以丢掉了mobile的微软主张的语言,再怎么折腾,都跟mobile上那两个没法比然后是serverside,说白了就是cloud,这个其实是java和javascript这些东西的天下,go做得其实也不怎样,我们在群里聊天的时候,百年酒馆有句话说得好,go他爹其实就是发明了一个东西让他更好地搬砖而已,go的流行得益于node以前的callbackhell以及spring的缓慢性能,spring那一套的确过于庞杂了,node以前的callback的确写起来非常滴别扭,go相比之下更加简单,goroutine下crud要简单很多,搬起砖来更像是spring/j2ee那一套,所以在几年前得到了一定的市场下面要说到的loom作者ronpressler有一个ppt解释了spring/j2ee和node的callbackhell的问题上面simple/blocking就是spring/j2ee现在的做法,下面就是node.jscallback时代的代码,complex作为技术,我们当然希望我全都要啦,既要开发简单,也要高性能,这里ron说是scalable,其实应该说highperformance比较好,scale跟stateless关系更大但是新技术是在不断推陈出新的,goroutine那个东西其实在早期c++生态里面叫做fiber,kotlin率先在jvm上实现了coroutine,然后java社区跟进,openjdk有一个项目叫做loom,刚刚在github上开源了,这个就是java版的fiber/goroutine以及coroutineopenjdk/loom另外一个已经在github上正式开源的openjdk项目叫做mobile,就是将来java正式登陆移动端的项目,以前的robovm被微软赐死了,安卓的java又是瞎改后的java,不标准,所以以后java的归java,google的归googleopenjdk/mobile其他的openjdk项目也打算逐步迁移到github上去正式开源,这个项目叫做skaraOpenJDK:Skara如果我们根据boost里面的定义,coroutine翻译成协程,fiber翻译成纤程,差别在于调度器scheduler,前者会在callback时候调度回原来的线程,后者则是可能将其调度到pool的其他线程上去,前者的技术脱胎于gui的技术,因为uithread有只有一条线程,uithread不可能好几条,也不需要好几条,所以将其调度回原来线程的虚拟线程叫做协程,协助原来线程完成io。但是这个技术到了服务器端之后,发生了改变,首先是node.js弄出了eventloop,把uithread变成了eventloop,然后再将其池化,然后加上调度器,使其对用户透明,这就是fiber和goroutine,其实我本人非常反感go发明了一个goroutine,而不是像主流一样坚持用fiber,java则坚持了这一命名,然后具体执行的时候,io之前和io之后,执行线程可能会有所差异,具体哪条线程执行,取决于你的调度器,所以java在loom里面提供了一个carrierthread的概念,当你printfiber的时候,就能看到具体的carrierthread了,你可以在io之前和io之后,将carrierthreadprint出来,多执行几次,就清楚了,你会发现carrierthread会被改变,但是coroutine的调度器,则不会改变具体的执行线程这个在kotlin里面最早得到了应用,所以kotlin同时被应用于两个主要场景,第一个是客户端,coroutinescope的例子就拿ui来说事,你可以在安卓或者tornadofx里面试试看,当它io的时候,是不是会回到原来的线程,直接Thread.currentThread就能拿到当前线程了,你会发现他们是一样的,还有一个就是服务器端,这个主要是在vert.x中得到了应用,值得一提的是,vert.x的kotlin支持大部分是我们中国人完成的,vert.x现在中国人贡献的部分越来越多,包括最近几次gsoc,有不少中国学生或者华裔在参与,最新的异步的mysqlclient也是来自成都电子科大的billy贡献的。扯远了,说回去服务器端,因为vert.x用的也是eventloop,所以vertx-lang-kotlin里面将vert.x的io操作,包装成了coroutine,所以在4.0里面,promise.await之后,你可以print之前和之后的thread,你会发现,是同一条thread,这就是coroutine那要做成fiber行不行呢?可以,也很容易,launch的时候,选择commonpool作为scheduler,就是fiber了,调度会从fork&joinpool中随机选取一条线程作为carrierthread,但是在vert.x上下文中,我们一般不这么做java最近这几个版本中,基本上都是照着kotlin在抄,switch越做越像kotlin的when,还有""",估计也是jb提出的反对,随后才将`改成了""",图像那边projectlanai(就是对metal的适配)也是jb和oracle一起完成的,希望14能正式将其弄到javafx中去,这样理论上能够提升mac上的渲染效率所以应该说go在服务器端的使用有其历史原因,比node开发简单,比spring清凉,但是你说它越来越多,嗯,未必,最新的tiobe给出了数据,go已经被groovy超过,而且groovy即将进入top10,我相信随着时间的推移,你会看到更多的语言开始逐步兴起我们现在主要是依赖这五个技术vert.x,es4x,javafx,flutter和swiftui前两个用在云端,前者用在非web服务端,后者将来会成为我们web端的主力工具,能够复用npm上的包,后三个主要是用前两个,前者用在桌面,后者用在移动而且这五个技术都非常相似,都有future/promise,都在await,或者将要有await(swift),所以让实习生们掌握这五个技术其实并不困难,写起代码来刷刷地快fiber的话,看看以后能否应用在workerthreadpool上,已经提了需求给vert.x了,但是鉴于loom还没毕业,所以这事以后再说了,还早,也不是那么迫切,反正不影响我们干活对于开发来说,其实这些技术的原理都大同小异,异步带来的改变也是差不多的,所以还是应该都搞懂比较好,而不是局限于某一个角落,比如只会用goroutinecrud不懂得怎么用eventloop+await,或者只会用后者,不懂得前者的调度原理,这都是不行的,我们对于实习生的要求是两个都掌握,虽然我们重点用后者,但是前者也不困难嘛,将来还是有可能要跟数据库打交道的,数据库的事务等信息现在是存在threadlocal里面,将来估计是会存在fiberlocal里面了,数据库虽然很无聊,很boring,我们的赢利点也不在数据库的使用上,但是对于很多搬砖的业务来说,这个还是需要的。

 上一篇:为什么美国很少发生内战 下一篇:为什么官方没有搞现代版的说文解字
北京租车
网站首页  |    关于我们   |   成功案例   |    租车百科   |    服务范围   |   城市直达   |   顺风车站   |   租车问答  |  车辆预订

电话:010-64005861  备案:京ICP备05045220号  地址:北京市东城区美术馆后街69号楼  
版权所有:Copyright: 2008-2012  
网站地图

北京租车 北京租车网