C++ 多线程重点内容

1.C++的线程分类

举例:假如你要烧水,然后去拉屎,准备杯子,烧水喂老婆喝水,老婆高兴了让你打lol(假设烧水20分钟。拉屎10分钟,杯子5分钟,老婆见不到你的忍耐时间为25分钟)

  • 同步阻塞(你只盯着水壶的火,烧开才走,再去拉屎,准备杯子,给老婆倒水)-老婆等了35分钟-生气
  • 异步阻塞(水没有烧好,但是你先拉屎,拉完干等水烧好,水烧好准备杯子)-老婆等了25分钟-勉强高兴
  • 同步非阻塞(水没有烧好,不等水烧好便准备杯子,看了15分钟直播,烧开,拉屎,喂老婆)-老婆等了30分钟,你看了15分钟比赛-老婆有点生气,但是你也没有亏太多
  • 异步非阻塞(你先烧水放那,然后直接陪老婆,陪老婆的时候准备杯子,水好了拿着杯子倒水,再喂老婆,然后自己去拉屎) -老婆等了0分钟,决定晚上好好奖励你

2.一些优化点

  • std::async在多级子函数中调用一定会阻塞,除非你层层的返回furture对象。
  • 真正多级子函数异步非阻塞还得创建线程对象。

3.例子

#include <future>
using namespace std;
#include <thread>
#include <chrono>
#include <iostream>

std::chrono::seconds operator"" _s( unsigned long long t ) ;
inline void sleep_ms(int t){
    std::this_thread::sleep_for( std::chrono::milliseconds(t) ) ;
}

inline void sleep_s(int t){
    std::this_thread::sleep_for( std::chrono::seconds(t) ) ;
}

void test(){
    int index1 = 0;
    while (index1<10){
        std::cout<<"index1:"<<index1<<std::endl;
        sleep_s(1);
        index1++;
    }
}

int main()
{
    auto t = std::async(std::launch::async,test);
    int index = 0;
    while (index<100){
        std::cout<<"index:"<<index<<std::endl;
        sleep_ms(500);
        index++;
    }
    t.get();
    return 0;
}

输出

index:0
index1:0
index:1
index1:1
index:2
index:3
index1:2
index:4
index:5
index1:3
index:6
index:7
index1:4
index:8
index:9
index1:5
index:10
index:11
index1:6
index:12
index:13
index1:7
index:14
index:15
index1:8
index:16
index:17
index1:9
index:18
index:19

2.协程

协程是什么鬼?就是你一边打游戏一边陪女朋友。你自己顾此失彼,协程就相当于你顺风的时候托管,然后你去陪女朋友,逆风的时候王者的你自己操作,女朋友就先等着。

协程相当于微线程,基于线程上创建的一种调度机制。

2.1应用场景

高并发服务,如秒杀系统、高性能API接口、RPC服务器,使用协程模式,服务的容错率会大大增加,某些接口出现故障时,不会导致整个服务崩溃。

爬虫,可实现非常巨大的并发能力,即使是非常慢速的网络环境,也可以高效地利用带宽。

即时通信服务,如IM聊天、游戏服务器、物联网、消息服务器等等,可以确保消息通信完全无阻塞,每个消息包均可即时地被处理。

2.2其他描述

协程会阻塞当前线程。

协程类似于生产者消费者模式,一个任务负责生产,另一个负责获取。

2.3通讯方式

协程通过协程管道传递信息。C++的机制一般是promise。

2.4案例

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值