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<<"in