这位创造GitHub冠军项目的“老男人”,堪称10倍程序员本尊

作者 | 马超,CSDN博客专家,金融科技从业者
来源 | CSDN博客

7月12日一款叫做TDengine的时序数据库项目在GitHub上开源了,这个项目一经发布就稳稳占据了GitHub排行榜的C位,目前TdEngine已经累积了5000多个star,并且连续一周排在上升榜首位。而且你要知道TdEngine的开发语言并不是火热的Python或JAVA,而是C语言。C语言无巧可取,虽见功夫,但是代码比较难读,能引发如此的关注绝对堪称奇迹,在我印象中即使是Mysql也没有达到如此的热度。

相信很多人也和笔者一样,是通过《比hadoop快至少10 倍的物联网大数据平台,我把它开源》的刷屏文才了解到陶老师与TdEngine的,当看到这位50岁的IT老兵老兵,依旧奋斗在编程一线,为TDengine开发贡献3万行代码时候,我就立刻四处向朋友打听,并最终要了陶老师的微信,做为一名80后程序员,我近不急待的想和陶老师直接沟通,想从他身上找到保持编程水平的秘决。

大神面对面-这才是10倍程序员该有的样子

2008年的时候笔者还是CSDN论坛WINDOWS MOBILE版的版主,从事手机导航软件的开发工作,而在彼时陶老师也创办了和信公司,并亲自开发了WindowsMobile版和信客户端,相同的开发平台经历也让我们迅速的拉进了彼此的距离。

在使用TdEngine的过程中我发现了两个小问题,一是数据库用户密码明文存放,二是数据文件权限设置不合理。让我十分震惊的是,这两个问题是我下午在和陶老师聊天时提出的,当晚发布版本就把问题全部解决了。后来沟通得知这些BUG都是陶老师自己动手修改的。我意识到TdEngine的效率应该来自于创始人对于代码的执着与热爱,而不是对员工996式的工作要求

陶老师是真的爱编程,尤其对于代码运行效率有着近乎狂热的追求,我查阅了陶老师近年来的作品,其和信客户端只有18K大小,胎心算法的实现只用了600行代码,而TDengine这样一个数据库项目竟然只需要1.5M安装包就能搞定,在手机APP都动辙上百M的今天,TDengine体量甚至显得有些异类。如果没有深厚的功底和坚定的信念是绝对无法达到如此高度的。我想陶老师应该就是传说中10倍程序员的典范吧。

10倍程序员对于他周围亲友的影响也是非常巨大的,当我打开TdEngine的官网(https://www.taosdata.com/cn/),其简洁明快的风格,一目了然的配图,实在让我无法把这一切和一位年近半百的老派IT士人联系到一起,当然后来我和陶老师聊到这件事的时候才知道,整个网站从设计、前端、后台、浏览器适配、数据分析到搜索引擎优化,都是由陶老师的儿子,一位刚刚高中毕业的00后操刀主持的,而且整个网站从无到有只用了三周时间,除了感叹一句后生可畏,由此也可以看出来和10倍程序员并肩作战的也都是10倍程序员,所以it团队的负责人在感叹自己没有18程序员相助时也要反思一下,自己是不是一位10程序员

TdEngine为什么会火

传统数据库厂商的问题在于傲慢、自大,他们认为数据是零件,数据库则是各类零件的加中心,很多工序都是为数据的修改准备的,无论修改是否发生加工车间为了保证一致性,都会对流水线上的数据加上各种各样的锁。这些操作浪费了很多时间,而且几乎没有任何轻量级的框架,可供用户选择省略掉这些冗余操作。而且传统厂商为了解决数据库的性能问题不是从底层架构逻辑下手,而是不休止的在应用与数据库之间加入各种像REDIS,NGIX等等代理或者缓存层,这种方式其实是加大了各层级间的性能开销。传统厂商认为自己非常了解数据,但却忘了用户比厂商更加了解自己的数据,天下可谓苦秦久已

而TdEngine是认为数据是信息流,它要做的非常简单,只是数据的录像机而已,信息调阅只要找到对应的录像带即可,这样的设计思路从底层逻辑上决定了td会是一款性能极高的产品。它更加贴合物联网时代的数据模型,而且代码只有10万行的量级,非常适合从从头开始学习。

所以TdEngine精确的找到了数据库市场的细分战场。他可以在相同的硬件条件下达到其它产品10倍的速度,完美解决了很多物联网,量化交易等场景的痛点。

TdEngine代码导读

当笔者打TdEngine的代码时不由眼前一亮,其代码风格及规范性绝对堪称一流,于是我打开了久违的souce insight,,再一次开始了阅读C语言代码的美妙旅程,在这里强烈推荐各位读者也来读一下,绝对堪称享受。

这里将给我启示最大的一段代码其链接在https://github.com/taosdata/TDengine/blob/master/src/util/src/tsched.c,向大家分享一下。鉴于本文肯定会分享给陶老师,所以估计会有作者亲答的环节:-),以下代码是一个典型的consumer-producer消息传递功能的实现,也就是有多个生产者(producer)生成并不断向队列中传递消息,也有多个消费者(consumer)不断从队列中取消息,而在java等高级语言中类似的功能已经被封装好了,这其实也让程序员无法了解线程间的同步和互斥机制。在正式进入到代码之前我想请大家思考这样的一个,互斥体( mutex)和信号量(semaphore)的使用是如何做到多线程安全的。

先来看结构体设计,具体我已经注释好了:

再来看初始化函数,这里需要特别说明的是,两个信号量的创建,其中emptySem是队列的可写状态,初始化时其值为queueSize,即初始时队列可写,可接受消息长度为队列长度,fullSem是队列的可读状态,初始化时其值为0,即初始时队列不可读。具体代码及我的注释如下:

再来看读消息的taosProcessSchedQueue函数,这个主要逻辑是

1.使用无限循环,只要队列可读即sem_wait(&pSched->fullSem)不再阻塞就继续向下处理
2.在操作msg前,加入互斥体防止msg被误用。
3.读操作完毕后修改fullSlot的值,注意这为避免fullSlot溢出,需要对于queueSize取余。同时退出互斥体。
4.对emptySem进行post操作,即把emptySem的值加1,如emptySem原值为5,读取一个消息后,emptySem的值为6,即可写状态,且能接受的消息数量为6

具体代码及注释如下:

最后来看写消息的taosScheduleTask函数,其基本逻辑是

1.写队列前先对emptySem进行减1操作,如emptySem原值为1,那么减1后为0,也就是队列已满,必须在读取消息后,即emptySem进行post操作后,队列才能进行可写状态。

2.加入互斥体防止msg被误操作,写入完成后退出互斥体。

3.写队列完成后对fullSem进行加1操作,如fullSem原值为0,那么加1后为1,也就是队列可读,咱们上面介绍的读取taosProcessSchedQueue中
sem_wait(&pSched->fullSem)不再阻塞就继续向下。

当然以上只是TdEngine优美代码的一小部分,而且笔者解读的功力也十分有限,这里再次强烈建议大家下载全部源码仔细学习,定能受益匪浅。

原文:

https://blog.csdn.net/BEYONDMA/article/details/96578186

(*本文仅代表作者观点)

(0)

相关推荐

  • 时间序列数据库分析

    什么是时间序列数据 什么是时间序列(Time Series,以下简称时序)数据?从定义上来说,就是一串按时间维度索引的数据.用描述性的语言来解释什么是时序数据,简单的说,就是这类数据描述了某个被测量的 ...

  • Copilot将来会成为自动编程的AI吗?

    相信不少人都用过代码工具或代码助手(不要狡辩),但是这次的AI不同于以往的工具,其他的工具需要抓取网络库已有的代码填填补补,而它可以更大范围的去试着理解已知代码,从而生成更详尽更适合的新的代码.不仅如 ...

  • 开源 – “这是最好的时代,这是最坏的时代”

    今天一早,我给一位远在西安还从未谋面的程序员小邓发出了一份很不错的offer.一周前,他观看腾讯开发者大会的直播视频,听了我的演讲之后,加了我的微信,并主动告诉我,很想加入涛思数据.虽然他毕业的学校还 ...

  • 业余程序员GitHub项目点赞达到3位数

    GitHub我用的是很少啦,因为本来就不是程序员,也没啥线上协作的需求,而且它教程都特别复杂,很容易让初学者头晕,很多人以为在介绍GitHub结果却成了git思想的大谈特谈! 最开始使用它只是因为很多 ...

  • 全球最火的程序员学习路线,没有之一!

    国外有一个爆火的开发人员学习路线,目前已经在 Github收获了 152 k+ star,Star 数量在 Github 所有仓库中排名第 9 .这个仓库有多火就不用说了吧! 作为程序员,如果你还不知 ...

  • 从程序员到营销大牛,精细化技术营销实践

    口述丨陶建辉 编辑丨道伟 技术人天生就具备做营销的优势!说此话的是涛思数据的联合创始人兼 CEO 陶建辉.在 9 月 13 日举行的 GTLC 南京站上,陶建辉作为特邀嘉宾出席了闭门会议,分享了技术人 ...

  • 程序员被误会得实在是太太太太太太深了!!!

    别问别人为什么,多问自己凭什么! 下方留言必回,有问必答! 每天08:00更新文章,每天进步一点点... 在互联网的世界里,程序员算是最善于"自黑"的群体之一了.经常称呼自己为&q ...

  • 初级程序员常犯错误一览

    粉丝福利:小编会从今天留言中抽选3名小伙伴赠送现金红包,感谢大家一直以来的支持!文末见喽! 作者 | 曹春晖 来源 | 码农桃花源(ID:CoderPark) 最近接手其他人做的项目,导致之前的一些幻 ...

  • 如何打破创业与工作中的年龄“魔咒”?

    对于程序开发工程师来说,有一个广泛认知上的"魔咒":35岁不再有竞争力,要么做技术管理或转行,要么等着被淘汰.但真的是这样吗?其实我们都知道,这个"魔咒"的根本 ...

  • 天图投资上半年共出手11个项目,净利润同比增长超10倍

    "截至上半年末,天图投资的在管项目数为129个." 作者:Stone Jin 编辑:tuya 出品:财经涂鸦(ID:caijingtuya) 据公司情报专家<财经涂鸦> ...

  • 这类“老中医”,专治程序员

    中国警察网21小时前 · 人民公安报社中国警察网官方账号 医生,我经常头晕 你肾虚! 医生,我耳鸣得很频繁 你肾虚!! 医生,我失眠多梦睡不踏实 你肾虚!!! 浙江绍兴的小王就遇到了 这么一名老中医- ...

  • 王者荣耀S23:4位克制吕布的英雄,作为老玩家的你知道几个?

    吕布真的是所有坦克玩家们最反感对线的英雄了,但偏偏有不少玩家爱玩,那么王者荣耀如何克制吕布,如何将吕布在游戏对局中压制住,接下来就让小编为大家详细介绍一下,有哪些英雄能克制吕布. 一般对局中克制吕布的 ...

  • 这是一位行医40年的河南老中医的自述(完整版)

    [免责声明]图文来源于网络,如有侵权,请联系删除! 中医学是一门伟大的科学宝库,我们应当努力地去挖掘它,并加以提高. 本人是河南省信阳人氏.祖上世代中医,据老辈人传,是名医张仲景的后代.长期以来,对祖 ...

  • 这是位行医40年的河南老中医的自述(完整版)

    中医学是一门伟大的科学宝库,我们应当努力地去挖掘它,并加以提高. 本人是河南省信阳人氏.祖上世代中医,据老辈人传,是名医张仲景的后代.长期以来,对祖国的中医学有着深刻的认识和了解,但也发现了一些新问题 ...

  • 我有位同学,越站桩越老,现在都快成老头了,怎会如此?

    站桩,我尝试过,包括八段锦.易筋经等健身操,但由于各种原因,只是时断时续的练习,没有一直坚持下去,说一下自己的体会. 一些传统的健身操,确实起到活动身体的效果,最明显的感受是从前手凉脚凉的我,每次锻炼 ...

  • 最牛的板块,最强的妖股!一位私募冠军教练...

    最牛的板块,最强的妖股!一位私募冠军教练酒后吐真经!今天股坛聚焦为你现场揭秘!学会了,不得了,抓涨停太简单!想不赚钱都难! 今天和大家聊一下,我最近运用到的一种买股的方法,我把它叫做:妖股回调买入战法 ...

  • 哀挽 | 安溪县楹联学会60位联友痛挽袁老隆平先生

    痛挽袁老隆平先生 人物小传 袁隆平(资料图) 袁隆平,1930年9月生,江西德安人. 他一生致力于杂交水稻技术的研究.应用与推广,发明"三系法"籼型杂交水稻,成功研究出" ...

  • 一位药店销售冠军整理的联合用药技巧,药店、药厂新手必备!

    呼吸道疾病用药 风寒感冒 症状:鼻塞流涕,发热头痛,恶寒身痛.咳嗽咽干. 推荐药品:风寒感冒颗粒,感冒清热胶囊,姜枣去寒颗粒,感冒清颗粒,感冒清热颗粒等. 风热感冒 症状:发热,有汗,鼻塞,咳嗽,头痛 ...