Linux 五种IO模型
![](https://img-blog.csdnimg.cn/direct/ed623d45fa8e4a77a863c16b471ee377.png)
一,区分阻塞、非阻塞和同步、异步
- 等待数据可读;
- 系统调用讲数据从内核拷贝到用户空间;
- 阻塞、非阻塞是对于等待数据可读、可写时,是否死等,即看第一阶段;
- 同步、异步是对于数据在用户空间和内核传递时,是否等待完成,即看第二阶段;
二,关于多路复用
- 多路复用介绍参考:万字图解| 深入揭秘IO多路复用-腾讯云开发者社区-腾讯云;
- IO 多路复用的复用指的是复用线程,而不是IO连接,目的是让少量线程能够处理多个IO连接和读写;
- 多路复用有两个会阻塞的阶段:第一阶段阻塞在select、epoll等系统调用,第二阶段阻塞在数据拷贝;
- 多路复用首先是同步IO,但是阻塞还是非阻塞不同文章说法不一,如果从第一阶段是否卡住死等数据就绪来看,是阻塞IO。
- 注意区分系统调用(如select、epoll)的阻塞和socket本身的阻塞,一般来说使用select、epoll是需要将socket设置为非阻塞的,因为有时返回socket可读但执行recv时发现并没数据,如果阻塞就会卡住;再者避免由于一个FD的阻塞读/阻塞写操作把处理多个文件描述符的任务饿死。参考:使用epoll时需要将socket设为非阻塞吗?-腾讯云开发者社区-腾讯云
三,区分原生Socket的非阻塞和NIO
- 原生Socket在创建的时候也可以指定为阻塞或非阻塞模式(区别只在第一个等待数据的阶段,第二个阶段调用recv拷贝数据都是一样的)。原生非阻塞Socket编程较复杂,比如可能需要循环判断send和recv的数据量是否完整,故一般不会轻易挑战。
- 原生Socket也是可以编程实现多路复用的,参考:SOCKET编程与复用 | YuYoung's Blog
- NIO底层实现也是操作的原生Socket,可以看作是对以上两点的包装,对使用者更友好。
相关文章:
![](https://img-blog.csdnimg.cn/direct/ed623d45fa8e4a77a863c16b471ee377.png)
Linux 五种IO模型
注:还有一种信号驱动IO,使用较少暂不讨论; 一,区分阻塞、非阻塞和同步、异步 看了很多文章对这两组概念解释和对比,说的太复杂了,其实没必要,两句话就能说清楚。 首先,对于读数据rec…...
![](https://img-blog.csdnimg.cn/direct/619de75e5a674bee97ec7483b3fc3d6c.png)
深度解析响应式异步编程模型
上一篇文章中我们聊了一下线程池,基于线程池的多线程编程是我们在高并发场景下提升系统处理效率的有效手段,但却不是唯一的。今天我们来看一下另一种异步开发的常用手段-响应式编程模型 传统多线程模型的缺陷 多线程模型是目前应用最为广泛的并发编程手段,但凡遇到什么性能…...
![](https://img-blog.csdnimg.cn/direct/d9edf54b8f604a06902a8107244f19d2.png#pic_center)
一个软件是如何开发出来的呢?
一、前言 如今,AI大爆发的时代,作为一名IT从业者,你是否也想尝试开发一套自己的系统,实现那些看似有可能实现的天马行空的想法,变成一个优秀甚至伟大的产品,甚至带来某个行业的革新,那作为一名…...
![](https://www.ngui.cc/images/no-images.jpg)
宝塔板面有哪些优势
哈喽呀,大家好呀,淼淼又来和大家见面啦,在当今数字化时代,随着云计算和互联网技术的飞速发展,服务器管理成为了许多企业和个人开发者不可或缺的一部分。然而,传统服务器管理方式的复杂性和技术门槛往往令初…...
![](https://img-blog.csdnimg.cn/direct/83848bd11fc643aab06b9ab26b48afa2.png)
Mybatis中BaseEntity作用
新建各种对象的时候,一般来说,有几个属性是所有对象共有的,比如说id,is_del,is_enable这些,然后设置一个基础对象,以后新建所有对象的时候都继承它,就省的每次都要写这些共有的属性了...
![](https://img-blog.csdnimg.cn/direct/cd0392646e3a43cdaa7cbfe4469944dc.png)
IDEA2023中使用run Dashboard面板?实现批量运行微服务
1、直接点击Add service--->Run Configuration Type---->Spring Boot 2、这样就出现了run Dashboard面板,可同时运行多个工程模块,shift选中所有启动类组命名(Group Configurations) 3、启动所有的项目...
![](https://img-blog.csdnimg.cn/direct/f04541948fcf460fb636397667630e4d.png#pic_center)
分数受限,鱼和熊掌如何兼得?专业or学校,这样选最明智!
文章目录 引言一、专业解析二、名校效应分析三、好专业和好学校的权衡结论个人建议 引言 24年高考帷幕落下,一场新的思考与选择悄然来临。对于每一位高考考生,学校和专业都是开启大学新生活的两个前置必选项。但有时候“鱼与熊掌不可兼得”,…...
![](https://img-blog.csdnimg.cn/direct/27c890ed48524e798062ed6c51141a56.png)
CentOS 8.5 - 配置ssh的免密登录
文章目录 生成ssh密钥公钥内容放入服务器 生成ssh密钥 在本地主机安装 ssh工具,并生成公钥、私钥。 # 命令行输入 ssh-keygen -r rsa# 会在当前用户的家目录下生成一个.ssh目录公钥内容放入服务器 将上一步生成的id_rsa.pub公钥的内容复制到远程服务器 # 编辑文…...
![](https://img-blog.csdnimg.cn/img_convert/957677d717307499fabbef3fecc28956.png)
反转链表(java精简版)
反转一个单向链表。 public class ReversingLinkedList {static class Node {int val;Node next;public Node(int val) {this.val val;}public boolean hasNext() {return next ! null;}}public static void main(String[] args) {//构造Node head null;Node shift null;for…...
![](https://www.ngui.cc/images/no-images.jpg)
QPair使用详解
QPair使用详解 一、创建和初始化 QPair1.1 QPair默认构造1.2 使用值初始化1.3 QPair拷贝构造 二、访问 QPair 的值2.1 修改 QPair 的值2.2 比较 QPair2.3 使用 qMakePair 辅助函数2.4 使用 QPair 的场景 三、QPair自定结构体3.1 定义自定义结构体3.2 在 QPair 中使用自定义结构…...
![](https://img-blog.csdnimg.cn/img_convert/1e57f68d2978f93255b89b70af1ed429.png)
C# 语言在AGI 赛道上能做什么
自从2022年11月OpenAI正式对外发布ChatGPT依赖,AGI 这条赛道上就挤满了重量级的选手,各大头部公司纷纷下场布局。原本就在机器学习、深度学习领域占据No.1的Python语言更是继续稳固了自己AI一哥的位置。凭借着Microsoft 和 OpenAI 长期以来一直是紧密相连…...
![](https://www.ngui.cc/images/no-images.jpg)
微信小程序-API 本地存储
一.本地存储-同步API 存储 : wx.setStorageSync 获取:wx.getStorageSync 删除:wx.removeStorageSync 清空:wx.clearStorageSync 代码: save(){//存储wx.setStorageSync(id, 1) wx.setStorageSync(obj, {name:"te…...
![](https://www.ngui.cc/images/no-images.jpg)
TensorFlow音频分类修复
原先传wav格式,后来发现前端生成的wav格式不完整 后端改mp3 其实是mp3和wav都可以接收 前端MP3和wav格式不正确,导致可以接收,但都无法计算时长 该文作废,可能导致音频分类不准确 修复TensorFlow放到生产后报错问题-CSDN博客 依赖 <dependency><groupId>or…...
![](https://www.ngui.cc/images/no-images.jpg)
C#学习系列之ListView垂直滚动
C#学习系列之ListView垂直滚动 前言垂直滚动总结 前言 当ListView中不断增加新内容,经常是纵向滚动。 垂直滚动 这个是关键:<VirtualizingStackPanel/> <ListView.ItemsPanel><ItemsPanelTemplate><VirtualizingStackPanel/>&…...
![](https://www.ngui.cc/images/no-images.jpg)
MySQL 常用函数总结
MySQL 提供了丰富的内置函数,用于在查询中进行各种计算、字符串处理、日期和时间操作等。这些函数可以帮助我们更有效地从数据库中检索和处理数据。下面将总结一些 MySQL 中常用的函数及其用法。 1. 数值函数 1.1 ROUND() ROUND() 函数用于对数值进行四舍五入操作…...
![](https://img-blog.csdnimg.cn/direct/efa034be150a4d8086b65c76e8b2d8eb.png)
SpingBoot快速入门下
响应HttpServietResponse 介绍 将ResponseBody 加到Controller方法/类上 作用:将方法返回值直接响应,如果返回值是 实体对象/集合,将会自动转JSON格式响应 RestController Controller ResponseBody; 一般响应 统一响应 在实际开发中一般…...
![](https://www.ngui.cc/images/no-images.jpg)
什么是symbol?
在ES6(ECMAScript 2015)中,Symbol是一种新的基本数据类型,它的主要特点是独一无二且不可变。以下是关于ES6中Symbol的详细解释: 定义与特性: Symbol是ES6引入的一种基本数据类型,用于表示独一无…...
![](https://img-blog.csdnimg.cn/direct/90e3e7b0f6b841738e6be7ec3ab0d6b8.png#pic_center)
Tailwind CSS 响应式设计实战指南
title: Tailwind CSS 响应式设计实战指南 date: 2024/6/13 updated: 2024/6/13 author: cmdragon excerpt: 这篇文章介绍了如何运用Tailwind CSS框架创建响应式网页设计,涵盖博客、电商网站及企业官网的布局实例,包括头部导航、内容区域、侧边栏、页脚…...
![](https://img-blog.csdnimg.cn/img_convert/02144692caa8279bd4105358e03432ed.png)
如何把模糊的图片修复变清晰,怎么做?有那些方法?
模糊照片怎么修复清晰?有些照片可能会因为保存不当或其他原因而变得模糊,这些照片删掉又觉得可惜,那么如何让这些照片焕然一新呢?今天就给大家分享几种可以将这些珍贵的模糊照片修复为高清照片的方法。接下来,给大家演…...
![](https://www.ngui.cc/images/no-images.jpg)
思科路由器密码恢复方法
1.密码恢复原理 Cisco路由器保存了几种不同的配置参数,并存放在不同的内存模块中。 Cisco系列路由器的内存有:ROM,闪存(Flashmemory),RAM,不可变RAM和动态内存(DRAM)等5种。 一般情况…...
![](https://www.ngui.cc/images/no-images.jpg)
HTML某联招聘
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <!-- 一些其他说明: 不写form的话,表单内容也是可以正常显示的࿰…...
![](https://img-blog.csdnimg.cn/img_convert/0946d34c32b251aa7e39c61c1213fe2a.png)
第一百一十六节 Java 面向对象设计 - Java 终止块
Java 面向对象设计 - Java 终止块 try 块也可以有零个或一个 finally 块。 finally 块总是与 try 块一起使用。 语法 使用 finally 块的语法是 finally {// Code for finally block }finally 块以关键字 finally 开始,后面紧跟一对…...
![](https://img-blog.csdnimg.cn/direct/48f39eb57aed41938c08905722e13795.png)
YOLOv10改进 | 注意力篇 | YOLOv10引入YOLO-Face提出的SEAM注意力机制优化物体遮挡检测
1. SEAM介绍 1.1 摘要:近年来,基于深度学习的人脸检测算法取得了长足的进步。 这些算法通常可以分为两类,即像 Faster R-CNN 这样的两级检测器和像 YOLO 这样的一级检测器。 由于精度和速度之间具有更好的平衡,一级探测器已广泛应用于许多应用中。 在本文中,我们提出了一…...
![](https://img-blog.csdnimg.cn/direct/74a7f3f441f24d48aacea56d42efedd8.jpeg)
问题解决:Problem exceeding maximum token in azure openai (with java)
问题背景: Im doing a chat that returns queries based on the question you ask it in reference to a specific database. For this I use azure openai and Java in Spring Boot. 我正在开发一个聊天功能,该功能根据您针对特定数据库的提问返回查询…...
![](https://img-blog.csdnimg.cn/direct/ee88f3b6324d4ca98b47b3d589d726bd.png)
eNSP学习——OSPF在帧中继网络中的配置
目录 主要命令 原理概述 实验目的 实验场景 实验拓扑 实验编址 实验步骤 1、基本配置 2、在帧中继上搭建OSPF网络 主要命令 //检查帧中继的虚电路状态 display fr pvc-info//检查帧中继的映射表 display fr map-info//手工指定OSPF邻居,采用单播方式发送报文 [R1]os…...
![](https://img-blog.csdnimg.cn/img_convert/ebb3974cab8761c1bc328baebd18c93d.png)
PHP转Go系列 | 条件循环的使用姿势
大家好,我是码农先森。 条件 在 PHP 语言中条件控制语句,主要有 if、elseif、else 和 switch 语句 // if、elseif、else 语句 $word "a"; if ($word "a") {echo "a"; } elseif ($word "b") {echo "b&…...
![](https://img-blog.csdnimg.cn/direct/9f8323c0199a4235aea3bdee86c65366.gif)
八大经典排序算法
前言 本片博客主要讲解一下八大排序算法的思想和排序的代码 💓 个人主页:普通young man-CSDN博客 ⏩ 文章专栏:排序_普通young man的博客-CSDN博客 若有问题 评论区见📝 🎉欢迎大家点赞👍收藏⭐文章 目录 …...
![](https://www.ngui.cc/images/no-images.jpg)
【LeetCode热题 100】三数之和
leetcode原地址:https://leetcode.cn/problems/3sum/description 描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和…...
![](https://www.ngui.cc/images/no-images.jpg)
【深度学习驱动流体力学】完整配置安装 OpenFOAM 及其所需的ThirdParty与QT5工具
OpenFOAM 简介 OpenFOAM(Open Field Operation and Manipulation)是一个领先的开源计算流体动力学(CFD)软件包,由 OpenFOAM Foundation 开发和维护。作为一个高度模块化和可扩展的软件工具箱,OpenFOAM 支持模拟多种物理现象,包括流体流动、传热、混合、燃烧、声学等。由…...
![](https://img-blog.csdnimg.cn/direct/be8b046c1cc14cd09922c3be403e14bc.png)
YOLOv10改进 | Neck | 添加双向特征金字塔BiFPN【含二次独家创新】
💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录:《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容,内含各种Head检测头、损失函数Loss、B…...
![](https://img-blog.csdnimg.cn/2020082221021797.png?#pic_center)
电子商务网站怎么做数据库/sem技术培训
译 原文:https://dev.to/chrissiemhrk/git-commit-message-5e21 提交信息是对提交之前添加和更改的文件所做的更改的简短描述。 良好的提交信息不仅对你所参与的项目上其它的团队成员很重要,对你自己而言也很重要,你需要跟踪所有提交&am…...
![](http://hi.csdn.net/attachment/201009/2/0_1283417278t7T2.gif)
广州企业网站建设靠谱/腾讯朋友圈广告怎么投放
Windows图形基础 Windows系统的两大部分: User32:提供windows应用程序的组成元素,比如窗口,文本框,按钮等。GDI/GDI:提供绘图API,比如绘制图形、文本与图像等。WCF不再基于User32和GDI/GDI,而是…...
![](https://img-blog.csdnimg.cn/20190522163226527.png)
如何建网站教程视频/公司网络优化方案
Java类的初始化顺序: 若有继承,先初始化父类中的静态和子类中的静态,再初始化父类和子类的构造方法 静态变量(带有static的变量)或者静态代码区—>类中new对象的代码//构造函数 静态最优先,成员变量次…...
![](/images/no-images.jpg)
网页界面设计需要首先做市场研究/长沙专业seo优化公司
众所周知,es新增了promise,避免了回调地狱。而es7的async/await更加完美的将异步实现为同步代码。 更多关于promise,async/await,推荐:阮一峰 在vue项目中,http请求我们更多用到的是axios,如果…...
医院网站建设哪家好/百度竞价排名点击软件
一、判断题:T为正确F为错误 C程序的基本组成单位是函数TC程序可以由一个或多个函数组成TC语言可以不用编译就能被计算机识别执行Fmain()函数必须放在其它函数之前F每个C程序中都必须要有一个main()函数T在C程序中main()函数的位置是固定的FC程序中的main()函数必须…...
![](http://543925535.blog.51cto.com/attachment/201301/11/639838_1357892986ndBN.jpg)
用阳寿做交易的网站/网络推广有哪几种方法
part1:现状分析 某中小企业希望在现有It架构基础之上对当前的DELL服务器进行扩容。 其中一台R610目前有剩余硬盘空间,但是8GB内存已吃满,内存有扩展的空间; 另外一台R710,内存为32GB,有大量剩余内存&#…...