在我们写代码的时候,经常会有批量创建任务并等待返回的场景;此时使用生产消费者并发的提交任务来代替for循环逐个执行任务能够大大提高代码效率;
然而不加限制的创建Goroutine也是会有内存溢出、CPU切换过多等资源浪费的情况;
本文讲述了Go中一些常用的控制Goroutine数量的方法;
源代码:
在我们写代码的时候,经常会有批量创建任务并等待返回的场景;此时使用生产消费者并发的提交任务来代替for循环逐个执行任务能够大大提高代码效率;
然而不加限制的创建Goroutine也是会有内存溢出、CPU切换过多等资源浪费的情况;
本文讲述了Go中一些常用的控制Goroutine数量的方法;
源代码:
本文展示了如何在Rust中使用PhantomType消除重复代码;
源代码:
有些编程语言提供了代码格式化检查等工具,如:Go、Rust等,我们可以在commit之前,对代码进行格式化检查,保证代码规范,而pre-commit
正是这样的工具;
最近在学习Rust,而Rust和WebAssembly的结合正在如火如荼的进行着;相比于Go,Rust和WebAssembly的结合可以说是更加成熟,包括了编译优化、甚至编译完成可以一键发布到npm库;
本文讲述了如何使用Rust实现一个Hello-World的WebAssembly;
关于Go实现WebAssembly,见:
源代码:
虽然用了比较长时间的Golang,但是还是有很多不懂得地方;比如,最近我才发现,原来通过recover函数拦截的err并不会返回堆栈信息,而是仅仅返回类似于“空指针错误”的信息,基本上没什么用,更没法定位到底是哪行代码发生了panic十分鸡肋;
最后经过查找网上的资料发现,可以通过runtime包获取到堆栈信息;
源代码:
前三篇分别讲解了Linux内核所以提供的功能:Namespace、Cgroups和UnionFS,本篇使用这些技术,真正的实现一个类似于Docker运行环境下的容器;
系列文章:
源代码:
分享一个每天自动领取Epic-Game游戏的Docker镜像;
源代码:
讲述Docker底层原理的第三篇文章;
本文讲述了和Docker底层文件存储相关的技术:UnionFS以及AUFS;
系列文章:
源代码:
讲述Docker底层原理的第二篇文章,本文讲述了Docker和K8S中限制容器硬件资源的技术:Linux内核中的Cgroups;
系列文章:
源代码:
讲述Docker底层原理的开篇文章,本文讲述了Linux内核中的Namespace和Docker的关系;
系列文章:
源代码: