C++协程入门教程

一、环境搭建(Docker+双编译系统)

1. 全能Docker环境配置

FROM ubuntu:22.04

# 基础工具链
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    build-essential cmake bazel git g++-12 libcppcoro-dev \
    openssh-server rsyslog curl gnupg openjdk-17-jdk && \
    rm -rf /var/lib/apt/lists/*

# Bazel安装
RUN curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > /etc/apt/keyrings/bazel.gpg && \
    echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/bazel.gpg] https://storage.googleapis.com/bazel-apt stable jdk1.8" > /etc/apt/sources.list.d/bazel.list && \
    apt-get update && apt-get install -y bazel-6.0.0

# SSH配置
RUN mkdir /var/run/sshd && \
    useradd -m -s /bin/bash developer && \
    echo "developer:devpass" | chpasswd && \
    mkdir -p /home/developer/.ssh && \
    chmod 700 /home/developer/.ssh

# 日志配置
RUN mkdir -p /var/log/ssh && \
    touch /var/log/ssh/auth.log && \
    chown syslog:adm /var/log/ssh/auth.log

COPY sshd_config /etc/ssh/sshd_config
COPY logging.conf /etc/rsyslog.d/

EXPOSE 22
CMD ["bash", "-c", "service rsyslog start && /usr/sbin/sshd -D"]

构建命令:

docker build -t cpp-dev .

2. 开发环境

docker run -it --rm -v $(pwd):${pwd} cpp-dev

# 检查编译器
g++-12 --version | grep '12.3'

# 验证Bazel
bazel --version  # 应输出6.0.0

# 启动三个实例
docker run -d -p 2222:22 --name dev1 -v dev1-logs:/var/log/ssh cpp-dev
docker run -d -p 2223:22 --name dev2 -v dev2-logs:/var/log/ssh cpp-dev
docker run -d -p 2224:22 --name dev3 -v dev3-logs:/var/log/ssh cpp-dev

# 查看日志
docker exec dev1 tail -f /var/log/ssh/auth.log

二、协程核心实战

1. 协程基础三剑客

#include 
#include 
#include 
#include 

// 生成器协程
cppcoro::generator<int> fibonacci(int limit) {
   
    int a = 0, b = 1;
    while (a < limit) {
   
        co_yield a;
        auto next = a + b;
        a = b;
        b = next;
    }
}

// 异步任务协程
cppcoro::task<std::string> async_greeting() {
   
    co_await std::suspend_always{
   };
    co_return "Hello from coroutine!";
}

// 主控函数
int main() {
   
    // 使用生成器
    for (auto num : fibonacci(1000)) {
   
        std::cout << num << " ";
    }
    std::cout << "\n";

    // 执行异步任务
    auto result = cppcoro::

你可能感兴趣的:(#,北漂+滴滴出行,C++协程,VIP,激励,c++,开发语言)