From 8713a7d7a3b94d4ce6b8e0e3b9f267136feb0769 Mon Sep 17 00:00:00 2001 From: YiRanCN Date: Mon, 23 Oct 2023 11:26:27 +0800 Subject: [PATCH] 1 --- .../program/{erlang.md => Erlang/index.md} | 4 +++- .../program/{golang.md => Golang/index.md} | 18 +++++++++--------- .../program/images/zhiling-system-app.webp | Bin 0 -> 15020 bytes docs/study/program/index.md | 12 +++++++++++- 4 files changed, 23 insertions(+), 11 deletions(-) rename docs/study/program/{erlang.md => Erlang/index.md} (88%) rename docs/study/program/{golang.md => Golang/index.md} (74%) create mode 100644 docs/study/program/images/zhiling-system-app.webp diff --git a/docs/study/program/erlang.md b/docs/study/program/Erlang/index.md similarity index 88% rename from docs/study/program/erlang.md rename to docs/study/program/Erlang/index.md index 4df6f6466..a44d4caaf 100644 --- a/docs/study/program/erlang.md +++ b/docs/study/program/Erlang/index.md @@ -1,8 +1,10 @@ +# Erlang + ### 简介 Erlang 的设计目标非常明确,就是专门为大型的电信系统设计。 所以它的应用场景和设计需求就是电信领域里需要解决的问题。 -主要是三个: **高并发**、**高容错**、**软实时**。电信系统负载非常大,需要同时服务大量用户的能力;同时不允许出错,电话频繁掉线会很快把客户赶到竞争对手那边;再者,即便某个通话再繁忙也不能影响其他通话的正常进行,到技术层面就是,不能因为某个任务很重,就把其他的任务的资源都占用了,while loop 占用 100% CPU是绝对不允许的。 +主要是三个: **高并发**、**高容错**、**软实时**。电信系统负载非常大,需要同时服务大量用户的能力;同时不允许出错,电话频繁掉线会很快把客户赶到竞争对手那边;再者,即便某个通话再繁忙也不能影响其他通话的正常进行,到技术层面就是,不能因为某个任务很重,就把其他的任务的资源都占用了,while loop 占用 100% CPU 是绝对不允许的。 ### 参考 diff --git a/docs/study/program/golang.md b/docs/study/program/Golang/index.md similarity index 74% rename from docs/study/program/golang.md rename to docs/study/program/Golang/index.md index 51bf7219e..8d5a98780 100644 --- a/docs/study/program/golang.md +++ b/docs/study/program/Golang/index.md @@ -1,14 +1,16 @@ -### Go语言设计初衷 +# Golang -为了解决当时Google开发遇到的问题: +### Go 语言设计初衷 + +为了解决当时 Google 开发遇到的问题: 1. 编译慢; -2. 大量的C++代码,同时又引入了Java和Python; +2. 大量的 C++代码,同时又引入了 Java 和 Python; 3. 更新的花费越来越长; 4. 分布式的编译系统; 5. 数百万的服务器; -### Go语言的特色 +### Go 语言的特色 1. 高效的并发编程; 2. 内存回收(GC); @@ -17,7 +19,7 @@ 5. 语言交互性; 6. 没有异常处理(Error is value); -### Go语言的优势 +### Go 语言的优势 1. 学习曲线容易; 2. 效率:快速的编译时间,开发效率和运行效率高; @@ -25,17 +27,15 @@ 4. 并行和异步编程几乎没有痛点; 5. 自由高效:组合的思想、无侵入式的接口、强大的标准库、部署方便、稳定性; -### 我们为什么选择Go语言 +### 我们为什么选择 Go 语言 1. 执行性能 2. 开发效率 -### Go语言能做什么 +### Go 语言能做什么 1. 服务器编程; 2. 分布式系统、数据库代理器、中间件等; 3. 网络编程; 4. 数据库操作; 5. 开发云平台; - - diff --git a/docs/study/program/images/zhiling-system-app.webp b/docs/study/program/images/zhiling-system-app.webp new file mode 100644 index 0000000000000000000000000000000000000000..641eb4220998b2fcea9f63dc0d2c09b1da595d8f GIT binary patch literal 15020 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 Sn^S{h8&V5>`