同步和异步、阻塞与非阻塞

一、同步和异步的概念

首先同步和异步是访问数据的机制

  • 同步:同步一般指主动请求并等待IO操作完成的方式
  • 异步:主动请求数据后便可以继续处理其它任务,随后等待IO操作完毕的通知
    两者的区别:同步会一行一行执行代码,而异步会跳过一段接着执行后面的代码(比如回调函数就是异步的一种形式)。

二、同步与异步demo

1.同步

#include<iostream>
#include<thread>
#include<mutex>
#include<list>
#include<sstream> //拼接字符串using namespace std;
condition_variable cond; //通知信号static mutex mtx;
list<string> mesg;void ReadTest(int i)
{for (;;){if (mesg.empty()){this_thread::sleep_for(10ms);continue;}unique_lock<mutex> lock(mtx);cond.wait(lock);cout << i<<"thread recive mseg :" << mesg.front() << endl;mesg.pop_front();}
}
void WriteTest()
{int i = 0;for (;;){this_thread::sleep_for(30ms);unique_lock<mutex> lock(mtx);stringstream ss;ss << "mesg" << i++;mesg.push_back(ss.str());cond.notify_one();cout << "send mesg" << endl;}}
int main() 
{thread th(WriteTest);th.detach();for (int i = 0;i < 3;i++){thread th(ReadTest,i+1);th.detach();}getchar();return 0;
}

在这里插入图片描述
发送消息后,另一接受线程收到后,发送线程才能继续发送

2.异步

#include<iostream>
#include<future>
#include <chrono>
using namespace std;typedef void(*CB)();void callback()
{cout << "Cb" << endl;for (int i = 0; i < 10; i++){cout << i + 1 << endl;this_thread::sleep_for(200ms);}
}void CbTest(CB cb)
{cout << "CbTest" << endl;// 创建异步任务来执行回调函数std::future<void> fut = std::async(std::launch::async, cb);// 主线程继续执行其他操作cout << "Main thread continues" << endl;cout << "test" << endl;// 等待异步任务完成fut.get();
}int main()
{CB cb = callback;CbTest(cb);return 0;
}

在这里插入图片描述
在执行循环的同时 也执行了打印test这行代码

三、阻塞与非阻塞

2.1 阻塞
阻塞就是把线程堵住了,线程不能去干别的事。在阻塞情况下,用户线程读取内核空间数据,如果此时没有数据返回,那么当前线程就会被堵住,一直等到有数据返回后,当前线程才会返回响应结果。

2.2 非阻塞
非阻塞就是线程没有被堵住,当前线程想干啥干啥。对于非阻塞情况,用户线程读取内核空间数据,不管此时有没有数据返回给线程,当前线程都会直接返回响应结果,而不会一直在原地等待数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/461592.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从模型到前端,你应该知道的LLM生态系统指南

LLM在在2023年发展的风生水起&#xff0c;一个围绕LLM的庞大生态系统正在形成&#xff0c;本文通过介绍这个生态系统的核心组成部分&#xff0c;来详细整理LLM的发展。 模型-核心组件 大型语言模型(llm)是人工智能应用程序背后的原材料。这些模型最初被预先训练来预测句子中的…

NBA2K24 陈盈骏面补

NBA2K23-24 陈盈骏面补 NBA2K23-NBA2K24通用 陈盈骏面补 现效力于中国男子篮球职业联赛CBA广州龙狮 下载地址&#xff1a; https://www.changyouzuhao.cn/9617.html

C语言操作符超详细总结

文章目录 1. 操作符的分类2. 二进制和进制转换2.1 2进制转10进制2.1.1 10进制转2进制数字 2.2 2进制转8进制和16进制2.2.1 2进制转8进制2.2.2 2进制转16进制 3. 原码、反码、补码4.移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符&#xff1a;&、|、^、~6. 逗号表达式…

windows10安装配置nvm以达到切换nodejs的目的

前言 各种各样的项目&#xff0c;各种node环境&#xff0c;还有node_modules这个庞然大物。。想想都觉得恐怖。 所以现在有了&#xff1a;nvm-切换node环境&#xff0c;pnpm–解决重复下载同样类库的问题。 下面将就如何在win10下配置进行说明 nvm下载配置 nvm的github下载地…

NGINX upstream、stream、四/七层负载均衡以及案例示例

文章目录 前言1. 四/七层负载均衡1.1 开放式系统互联模型 —— OSI1.2 四/七层负载均衡 2. Nginx七层负载均衡2.1 upstream指令2.2 server指令和负载均衡状态与策略2.2.1 负载均衡状态2.2.2 负载均衡策略 2.3 案例 3. Nginx四层负载均衡的指令3.1 stream3.2 upstream指令3.3 四…

Huggingface上传模型

Huggingface上传自己的模型 参考 https://juejin.cn/post/7081452948550746148https://huggingface.co/blog/password-git-deprecationAdding your model to the Hugging Face Hub&#xff0c; huggingface.co/docs/hub/ad…Welcome&#xff0c;huggingface.co/welcome三句指…

Redis——缓存的持久化

1、持久化机制 Redis的所有数据都保存在内存中&#xff0c;如果没有配置持久化功能&#xff0c;Redis重启后数据就会全部丢失&#xff0c;所以需要开启Redis的持久化功能&#xff0c;将数据保存到磁盘上&#xff0c;这样当Redis重启后&#xff0c;可以从磁盘中恢复数据。Redis…

闲聊电脑(5)装个 Windows(一)

​夜深人静&#xff0c;万籁俱寂&#xff0c;老郭趴在电脑桌上打盹&#xff0c;桌子上的小黄鸭和桌子旁的冰箱又开始窃窃私语…… 小黄鸭&#xff1a;冰箱大哥&#xff0c;上次说到硬盘分区和格式化&#xff0c;弄完之后&#xff0c;就该装系统了吧&#xff1f; 冰箱&#x…

如何连接ChatGPT?无需科学上网,使用官方GPT教程

随着AI的发展&#xff0c;ChatGPT也越来越强大了。 它可以帮你做你能想到的几乎任何事情&#xff0c;妥妥的生产力工具。 然而&#xff0c;对于许多国内的用户来说&#xff0c;并不能直接使用ChatGPT&#xff0c;不过没关系&#xff0c;我最近发现了一个可以直接免科学上网连…

vscode连接ssh报错

关于vscode更新版本至1.86后&#xff0c;导致无法连接服务器问题的记录 原因&#xff1a;vscode1.86更新了对glibc的要求&#xff0c;需要最低2.28版本&#xff0c;导致各种旧版本的linux发行版&#xff08;比如最常见的centos 7&#xff09;都无法用remote-ssh来连接了&#…

Backtrader 文档学习- Plotting -Plotting on the same axis

Backtrader 文档学习- Plotting -Plotting on the same axis 1.概述 在同一轴上绘图&#xff0c;绘图是在同一空间上绘制原始数据和稍微(随机)修改的数据&#xff0c;但不是在同一轴上。 核心代码&#xff0c;data数据正负50点。 # The filter which changes the close pri…

【深度学习:Bard】我们 AI 之旅的重要下一步

【深度学习&#xff1a;AI 之旅】我们 AI 之旅的重要下一步 Bard简介将 AI 的优势带入我们的日常产品中帮助开发人员利用 AI 进行创新大胆负责 人工智能是我们今天正在研究的最深刻的技术。无论是帮助医生更早地发现疾病&#xff0c;还是使人们能够用自己的语言获取信息&#x…