【Linux网络编程】网络编程常见概念

news/2024/11/15 13:02:31/文章来源:https://www.cnblogs.com/yangxuanzhi/p/18384772

【Linux网络编程】网络编程常见概念

阻塞与非阻塞

阻塞 IO:执行的系统调用可能因为无法立即完成而被操作系统挂起,直到等待的事件发生为止。如服务端的 accept(),在客户端未 connect() 时,其一直处于阻塞状态直至发生为止,但我们可以对监听的文件描述符通过 fcntl() 设置 O_NONBLOCK ,这时就能将阻塞 IO 改为非阻塞 IO。

非阻塞 IO:执行的系统调用总是立即返回,不管事件是否已经发生。如果事件没有立即发生,系统调用就返回 -1,和出错的情况一样。此时必须依据 errno 来区分这两种情况,对accept()、send() 和 recv() 而言,事件未发生时 errno 通常被设置为 EAGAIN 或者 EWOULDBLOCK,对 connect() 则 errno 被设置为 EINPROGRESS。

同步与异步

同步 IO:要求用户代码自行执行 IO 操作,即将数据从内核缓冲区读入用户缓冲区,或将数据从用户缓冲区读入内核缓冲区,而阻塞 IO、IO 复用和信号驱动 IO 等都属于同步 IO。

异步 IO:用户可以直接对 IO 执行读写操作,这些操作告诉内核用户读写缓冲区的位置,以及 IO 操作完成后内核通知应用程序的方式,即由内核完成 IO 操作。

所以我们也可以这样认为:同步 IO 向应用程序通知的是 IO 就绪事件,而异步 IO 则向应用程序通知的是完成事件。

陈硕:在处理 IO 的时候,阻塞和非阻塞都是同步的 IO,只有使用了特殊的 API 才是异步 IO。

如下则展示了阻塞 / 非阻塞与同步 / 异步的关系:

image

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

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

相关文章

【一】开始篇

概述 之前在暑假有空学习了一下mprpc项目,这是一个基于陈硕大佬写的muduo库、protobuf的分布式rpc框架,现在想整理一下内容(众所周知,学了不整理等于白学) 技术栈集群和分布式概念以及原理 RPC远程过程调用原理以及实现 Protobuf数据序列化和反序列化协议 Protobuf数据序列…

.net MAUI 发布时报错,无法识别指定的 RuntimeIdentifier“win10-x64”的原因

是因为MAUI项目引用了普通的C#类库导致的。MAUI只能引用MAUI类库,不能引用普通的类库。虽然能运行但打包时会报错。参考https://learn.microsoft.com/zh-cn/answers/questions/1685237/maui-net8-0-net8-0-targetframeworks。 这是MAUI类库

【Linux网络编程】字节序

【Linux网络编程】字节序 字节序 字节序就是字节在内存中存储的顺序,如32位整数0x01234567,在内存中存储时,有如下两种顺序:大端序将数值的高位存储在低位地址中,小端序则相反。 网络字节序 网络中传输数据均采用大端序。 Linux字节序转换函数 在 #include <netinet/in…

简化登录流程,助力应用建立用户体系

随着智能手机和移动应用的普及,用户需要在不同的应用中注册和登录账号,传统的账号注册和登录流程需要用户输入用户名和密码,这不仅繁琐而且容易造成用户流失。 华为账号服务(Account Kit)提供简单、快速、安全的登录功能,让用户快捷地使用华为账号登录应用。用户授权后,…

【SQL练习】demo1

为了适应技术发展的需求,SQL 标准于 2016 年增加了以下 JSON 功能: JSON 对象的存储与检索。将 JSON 对象表示成 SQL 数据。将 SQL 数据表示成 JSON 对象。如今,主流关系型数据库都增加了原生 JSON 数据类型和相关函数的支持,使得我们可以将 SQL 的强大功能与 JSON 文档存储…

Spring Boot 整合 Kafka

项目目录结构pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Kafka Starter --><dependency><groupId&…

.NET8 接入qwen2大语言模型

前言 dotnet8项目接入qwen大模型,这个主要用到了大模型管理工具叫做 ollama 有了它,接入大模型so easy。使用ollama可以接入很多大模型,详见:https://ollama.com/library 环境vs2022 preview dotent8 Windows 10 企业版1、下载ollama https://github.com/ollama/ollama安装…

实践项目-模拟公司自动化运维

(20240828,准备更新PostgreSQL部分) 大纲环境配置 系统:Debian 12.06 环境:阿里云ECS 以及 虚拟机序号 IP地址 域名 主机名1 192.168.100.12 k8s-master.yourname.com k8s-master2 192.168.100.15 k8s-node1.yourname.com k8s-node13 192.168.100.16 k8s-node2.yourname.c…

解决方案 | QTTabBar工具栏命令按钮设置everything、filelocator在当前文件夹下面搜索

备忘 everything 命令行参数参考 -path(是everythin参数) 表示在哪个位置(即哪个文件夹)下面搜索,这里%c%是qttabbar的参数,表示当前文件夹 https://www.voidtools.com/zh-cn/support/everything/command_line_interface/===================== filelocatorpro 命令行参数…

基于Ubuntu部署企业级kubernetes集群---k8s集群容器运行时Containerd准备

1.Containerd部署文件获取 1.下载 Containerd 文件wget https://github.com/containerd/containerd/releases/download/v1.7.21/cri-containerd-1.7.21-linux-amd64.tar.gz2.查看下载的文件 3.解压到当前文件到根目录下tar xf cri-containerd-1.7.21-linux-amd64.tar.gz -C /…

EMC/EMI详解

EMC/EMI详解 EMI(干扰)和EMS(抗扰)基础知识与整改流程 EMC主要包含两大项:EMI(干扰)和EMS(产品抗干扰和敏感度)。EMI(Electromagnetic Interference),表示电磁干扰(电磁干涉、电磁妨碍)的术语。由于发射电磁波会导致干扰,所以经常与Emission(辐射、发射)这一术…

java如何运行Python文件程序

有时候会遇到在java中启动Python的程序,下面进行说明package com.zxh.util;import lombok.extern.slf4j.Slf4j;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader;/*** python执行器** @Author zxh*…