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

news/2024/10/10 2:21:20

【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.ryyt.cn/news/53895.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【一】开始篇

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

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

是因为MAUI项目引用了普通的C#类库导致的。MAUI只能引用MAUI类库,不能引用普通的类库。虽然能运行但用vs发布时会报错。可以使用命令行打包。dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64 参考https://learn.microsoft.c…

【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…