GO语言统一了协程混乱的生态

协程并不是Go特有的专利,很多语言都有协程这个概念,比方说很多语言支持await/wait for,lambda,yield,loop,next……这些关键字的配合使用也只提供了一种从程序当中“中断”的能力,对于协程作业来说还远远不够。但是协程的实现其实是比较依赖操作系统的,所以别的语言在语义层面上支持协程的力度会显得非常非常地保守,作者更愿意把这件事情交给“协程库”去实现,从而不让自己的语言本身和操作系统形成强依赖。协程库很多比如fiber,libev,gevent,twisted,tornado。程序什么时候“中断”什么时候“恢复”这里就需要“事件”来驱动,各家有自己的事件驱动模型eventloop。导致的结果就是各家的eventloop互不兼容,你使用tornado,如果要连接redis,这个io就必须要进入tornado-ioloop,得找tornado-reids来完成,而不能使用twisted-adbapi。你的任何io操作都必须是要能被这一家的eventloop驱动,而这家的生态配套真的有这么全面吗?这是一个疑问。而Go语言就做的激进一些,语义层面就用select go channel把这个过程给抽象了,并且告诉你这就是go语言的最佳实践,所有的类库都是围绕这个天然的selector来构建,各种类库天然就互相兼容。当然语义上支持协程的语言不仅仅只有Go还有erlang,scala等等等等,但是为什么go关注度这么高,我觉得还有一个回避不了的问题就是go的爹是谷歌。

GO语言降低了协程编程的门槛

曾几何时,“协程编程”还是极少数高端玩家嘴里的黑话。无锁队列,并行,非阻塞,无栈有栈协议,上下文切换,actor ,csp这些黑话足以把你的膀胱吓得漏液。如今,作为资深c/c++工程师的你看到一个java crudboy看3个小时go cookbook 写出来的socket服务器的丑陋代码一开始你可能还会笑出声,但是一顿profile benchmark之后,你发现这丑陋玩意儿居然能比你花了半个月用c写的构建于colib+libuv+#¥%*&等一大堆你生怕写到简历上会引来一大堆猎头骚扰的黑科技构建的tcp服务端性能更高跑的更快的时候,笑容开始凝固并逐渐消失。go程序似乎不需要刻意调优,也不需要使用supervisor托管一堆进程,天然把协程分配到各核心上面自动压榨,而这一切还对程序员透明。终于你进入了“中年危机”。。。。。。

那GO语言是完美的吗?

孱弱的对象体系,由于Go语言缺乏泛型和继承,而只能使用的类似ruby的brought/mixin来extend class导致go不太适合写业务逻辑,特别是多人合作开发业务逻辑。还是会写到处写不利于维护的重复代码。

缺乏泛型和元编程能力,这个相信做过框架类的玩家应该懂的。

还有一些,诸如不支持像c/c++那种fork,你可能会觉得go不需要fork,但它居然wrap了sockpair这种典型的父子进程ipc,是不是有点精分,说好的原则呢?plugin把编译器信息也签名了且不支持卸载。想要玩热拔插也走不通了。循环依赖的问题。以及各种不知是不是作者自己恶趣味的强制规定等等吧。

其实我个人愚见,这些往协程上面发展的语言本身就跑偏了,这本来就是多任务操作系统一直以来干的事情。我们编程就应该是线性的这是最自然的。现在把这种心智负担加到开发人员身上不太合理,如果当下的操作系统不变革,不提供新的编程接口,那么就寄希望一种全新的操作系统问世吧哎。

链接:https://pan.baidu.com/s/1_4PIUb-Yl68aTW9Bw95iJA
提取码:tnav

黑马Go语言与区块链学习笔记相关推荐

  1. 区块链学习笔记23——ETH反思

    区块链学习笔记23--ETH反思 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 智能合约真的智能吗 ...

  2. 区块链学习笔记21——ETH智能合约

    区块链学习笔记21--ETH智能合约 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 智能合约简介 ...

  3. 区块链学习笔记15——ETH状态树

    区块链学习笔记15--ETH状态树 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 引入 要实现的功 ...

  4. 区块链学习笔记19——ETH难度调整

    区块链学习笔记19--ETH难度调整 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 前面学过,比特 ...

  5. 区块链学习笔记4——BTC实现

    区块链学习笔记4--BTC实现 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 UTXO 区块链是一 ...

  6. 区块链学习笔记16——ETH交易树和收据树

    区块链学习笔记16--ETH交易树和收据树 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 交易树和 ...

  7. 区块链学习笔记(一)——区块链和搓麻是一样一样的

    区块链学习笔记(一)--区块链和搓麻是一样一样的 新的开始 一个故事 要点 总结概念 几个搞笑的解释(真实性待查) 新的开始 你好! 这是我的第一篇学习笔记,想来想去就从近几年挺火的区块链开始吧,大多 ...

  8. 区块链学习笔记(三)——从商鞅变法谈“共识机制”

    区块链学习笔记(三)--从商鞅变法谈"共识机制" 前言 一.商鞅变法的故事 总结一下 二.共识机制 1)什么是共识机制 2)要点 总结 前言 区块链健康运行的灵魂是"共识 ...

  9. 区块链学习笔记2——BTC中的数据结构

    区块链学习笔记2--BTC中的数据结构 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 本文主要介绍 ...

最新文章

  1. spark 序列化错误 集群提交时_【问题解决】本地提交任务到Spark集群报错:Initial job has not accepted any resources...
  2. 受用一生的高效PyCharm使用技巧
  3. python语言标号_Python 编码为什么那么蛋疼?
  4. 业界丨OpenAI 发布通用人工智能研究纲领:以全人类的名义承诺
  5. 编程珠玑第七章 粗略估算
  6. jexcel可以合并单元格么_含金量超高的3个文本、字符合并实用技巧解读!
  7. html怎样添加日历控件,向日历控件中添加自定义内容
  8. 并查集与贪心算法的应用之求解无向图的最小生成树
  9. HTML鼠标悬停显示隐藏div,javascript – 在鼠标悬停时显示/隐藏DIV
  10. 北京国家开放大学计算机学院,李继先
  11. 调整Word中英文与汉字之间的空隙
  12. java effective
  13. Java并发指南12:深度解读 java 线程池设计思想及源码实现
  14. 淘宝低价引流违法吗,低价引流的处罚
  15. Python 画图加坐标,加点,加网格
  16. html5跟随手指的小球,Android自定义圆形View实现小球跟随手指移动效果(详细介绍)...
  17. 必知C++算法之排列组合基本操作
  18. 可移植bit-field与driverlib兼容的C2000控制器工程模板创建及SysConfig配置
  19. 【虚拟机】配置外网访问NAS黑群晖6.17
  20. 张欲莎-老公,不要停。。。

热门文章

  1. webbrowser控件 有数据 但页面空白_如何在Excel中实现可以切换不同数据系列的滚珠图?...
  2. 易优cms后台RCE以及任意文件上传漏洞
  3. v-on绑定特性命名带小横杠 ‘-’与props属性中变量怎么对应
  4. spring_IOC_自動裝配
  5. Java 判断字符串第一位和最后一位,并截取
  6. 【转载】单片机的背后
  7. Kali Linux渗透基础知识整理(三):漏洞利用
  8. 在Lucene.net实现自定义排序
  9. GridView的操作大全
  10. 文件上传服务器经常超时,解决Tomcat文件上传超时问题.