go by example之channel-synchronization.go

本文通过一个简单的Go语言程序示例介绍了如何使用Go语言进行并发编程。示例中创建了一个worker协程,该协程执行一些任务并在完成后通知主线程。文章展示了如何使用channel来同步协程,并解释了如何在等待并发任务完成的同时执行其他操作。
// 这个程序的例子说明,GO语言的并发是多么简洁,就是一个通用的结构,稍微改造后就可以用于实际中
// 对这个例子做了一些修改和说明
package main

import "fmt"
import "time"

func worker(done chan bool) {
    fmt.Print("working...")
    time.Sleep(2 * time.Second)
    fmt.Println("done")

    done <- true
}

func main() {

    done := make(chan bool, 1)
    fmt.Println("working A....")
    go worker(done)

    //模拟做其它的事
    //下面这句话是自己增加的, 原代码中没有
    fmt.Println("working B....")

    //等待并发的结束,如果没有结束,就阻塞在这里
    <-done
    fmt.Println("all work finish!")
}

执行结果:
working A….
working B….
working…done
all work finish!

我的系统1核心1G内存,已经运行UNIT LOAD ACTIVE SUB DESCRIPTION accounts-daemon.service loaded active running Accounts Service atd.service loaded active running Deferred execution scheduler caddy.service loaded active running Caddy cron.service loaded active running Regular background program processing daemon dbus.service loaded active running D-Bus System Message Bus getty@tty1.service loaded active running Getty on tty1 ModemManager.service loaded active running Modem Manager multipathd.service loaded active running Device-Mapper Multipath Device Controller mysql.service loaded active running MySQL Community Server polkit.service loaded active running Authorization Manager rsyslog.service loaded active running System Logging Service sing-box.service loaded active running sing-box Service snapd.service loaded active running Snap Daemon ssh.service loaded active running OpenBSD Secure Shell server systemd-journald.service loaded active running Journal Service systemd-logind.service loaded active running Login Service systemd-networkd.service loaded active running Network Service systemd-resolved.service loaded active running Network Name Resolution systemd-timesyncd.service loaded active running Network Time Synchronization systemd-udevd.service loaded active running udev Kernel Device Manager udisks2.service loaded active running Disk Manager unattended-upgrades.service loaded active running Unattended Upgrades Shutdown user@0.service loaded active running User Manager for UID 0 如何最小部署api
最新发布
09-05
你当前的系统配置为 **1 核 CPU + 1GB 内存**,并且已经运行了不少系统服务(如 `mysql.service`, `caddy.service`, `ssh.service` 等),这意味着你需要 **最小化部署 API 服务**,以避免内存不足导致服务崩溃。 --- ## ✅ 部署目标 - **最小内存占用** - **使用 Python 提供 API 接口** - **连接 MySQL 数据库** - **通过 Caddy 提供 HTTPS** - **不使用 Gunicorn、Nginx、uWSGI 等额外组件** --- ## 🧱 推荐方案:**Flask 轻量部署 + Caddy 反向代理** ### 💡 优点: - 内存占用最小(仅 Flask + Python) - 开发简单,部署快速 - 适合低并发访问(如测试、小项目) ### ❌ 缺点: - 不支持高并发 - 不支持异步 - 无进程管理 --- ## 🔧 步骤一:安装最小依赖 ```bash sudo apt update sudo apt install python3 python3-pip -y pip3 install flask pymysql ``` --- ## 📄 步骤二:编写最小 API 服务(Flask) 创建文件 `app.py`: ```python from flask import Flask, jsonify import pymysql app = Flask(__name__) # MySQL 配置 db_config = { 'host': 'localhost', 'user': 'your_db_user', 'password': 'your_db_password', 'database': 'your_database', 'charset': 'utf8mb4', 'cursorclass': pymysql.cursors.DictCursor } def get_db_connection(): return pymysql.connect(**db_config) @app.route('/api/data', methods=['GET']) def get_data(): conn = get_db_connection() with conn.cursor() as cursor: cursor.execute("SELECT * FROM your_table LIMIT 10") result = cursor.fetchall() conn.close() return jsonify(result) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) ``` --- ## ▶️ 步骤三:启动 API 服务(前台运行) ```bash python3 app.py ``` 服务将运行在 `http://0.0.0.0:5000/api/data` > 注意:这种方式不适合生产,仅适合测试。生产应使用 systemd 管理。 --- ## 🔐 步骤四:配置 Caddy 提供 HTTPS 编辑 Caddyfile(通常位于 `/etc/caddy/Caddyfile`): ```Caddyfile api.example.com { reverse_proxy http://127.0.0.1:5000 } ``` 重启 Caddy: ```bash sudo systemctl restart caddy ``` --- ## 📊 内存估算(关键) | 组件 | 占用内存 | |------|----------| | Flask + Python 基础 | ~50~80MB | | MySQL 查询 | ~10~20MB(视数据量) | | Caddy(已运行) | ~30~50MB(已计入) | | **总计** | **约 70~100MB** | ✅ **适合 1GB 内存服务器**,剩余内存可给系统使用。 --- ## 🧼 优化建议(进一步减少内存) 1. **关闭不必要的服务**(如 `snapd`, `ModemManager`, `multipathd` 等) 2. **限制 Flask 日志输出**(在 `app.run()` 中添加 `logging=False`) 3. **使用 `nohup` 后台运行 API 服务**: ```bash nohup python3 app.py > /dev/null 2>&1 & ``` 4. **使用 `screen` 或 `tmux`** 保持会话 --- ## ✅ 总结:最小部署方案 | 项目 | 推荐配置 | |------|----------| | 框架 | Flask | | 数据库 | pymysql | | Web 服务器 | Caddy(反向代理) | | 是否使用 Gunicorn | ❌ 否 | | 是否使用 systemd | ❌ 否(可选) | | 内存占用 | ~70~100MB | | 适合场景 | 低并发 API、测试、轻量服务 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值