UMBRELLA

未雨绸缪,举重若轻

什么是容器?

简而言之,容器是计算机的沙盒进程,与主机上的所有其他进程隔离,这种隔离利用了内核命名空间和cgroup,这些功能在linux中已经存在很长时间了。Docker正是利用了这些能力。总而言之,容器包括以下这些能力:

  • 是一个可运行的镜像实例,你可以使用Docker APICLI创建、启动、停止、移动或删除容器。
  • 可以在本地机器、虚拟机、云上部署和运行。
  • 是跨平台并且可移植的。
  • 与其他容器隔离运行自己的应用、二进制文件以及配置。

什么是容器镜像?

运行容器时,它使用隔离的文件系统。该自定义文件系统由容器镜像提供。由于镜像包含容器的文件系统,因此它必须包含运行应用程序所需的所有内容-所有依赖项、配置、脚本、二进制文件等。镜像还包含容器的其它配置,例如环境变量、要运行的默认命令和其它元数据。

将应用程序在容器中部署

准备工作

  • 在机器上下载&安装Docker
  • 在机器上下载&安装git客户端
  • 在机器上安装一个编辑文件的IDE或文本编辑器,这里建议下载&安装Visual Studio Code
阅读全文 »

Rust 的编译速度和跨平台编译相比 Go 语言就要难用很多,但这也是语言特点,当你从中受益时,必然要付出一些代价,本文主要介绍如何实现跨平台编译,使用 cross 这个工具。

我的工作台是 Mac M2,想编译出 LinuxWindows 的可执行文件,使用的代码很简单,就是 Hello World 示例程序,这个不是重点。

使用 cross 首先当然是安装,按照官方的描述,可以使用下面的命令:

1
cargo install cross --git https://github.com/cross-rs/cross

然后是安装 docker 或者 podman,本文以 docker 为例,讲述使用过程中遇到的问题及其解决方案。cross 的使用很简单,例如,如果我要编译 targetaarch64-unknown-linux-gnu,执行:

1
cross build  --target aarch64-unknown-linux-gnu
阅读全文 »

垃圾回收

垃圾收集是通过销毁未使用的对象,回收运行时未使用的内存的过程。垃圾收集器利用垃圾收集根(GCRoots)的概念来识别活动对象和死亡对象。

  • 有系统类加载器加载的类(不是自定义类加载器)
  • 实时线程
  • 当前执行方法的局部变量和参数
  • JNI方法的局部变量和参数
  • 全局的JNI参考
  • 用作同步监视器的对象
  • JVM出于其目的而从垃圾回收中保留的对象
阅读全文 »

很多语言中都有闭包,有的叫匿名函数,有的叫 lambda 函数,用一个最简单的例子演示闭包,例如 sort_by_key 传入的就是一个闭包函数:

1
2
3
4
5
6
7
8
9
10
struct City {
name: String,
population: i64,
country: String,
}

fn main() {
let mut cities = Vec::<City>::new();
cities.sort_by_key(|city| -city.population)
}
阅读全文 »

Rust 中的每一个引用都有其生命周期(lifetime),也就是引用保持有效的作用域。大部分时候生命周期是隐含并可以推断的,正如大部分时候类型也是可以推断的一样。但有些时候,Rust 需要我们使用泛型生命周期参数来注明他们的关系,这样就能确保运行时实际使用的引用绝对是有效的。

阅读全文 »

Rust 是一门赋予每个人构建可靠且高效软件能力的语言。

Rust 相比其他语言,具有显著的特点,尤其是:

  1. 性能高;Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。

  2. 高可靠;Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。

  3. 极具生产力;Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具——包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。

阅读全文 »
0%