儿子该如何找老子要钱------浅聊linux中的5种I/O模型并顺便说说异步和非阻塞的区别

本文主要是介绍儿子该如何找老子要钱------浅聊linux中的5种I/O模型并顺便说说异步和非阻塞的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        某儿子在上大学, 经济还不能独立, 经常向老子要钱。 有的时候, 儿子没有直接向老子要钱, 而是先嗅探式地问问老子是否有钱, 然后再伺机开口要, 也是蛮聪明的哈。

 

        我们来看看, 儿子要钱的几种方式:

        1.  如图:同步, 阻塞地要钱

             儿子 = 用户进程

             老子 = linux内核

             要钱 =  recv

 

 

        2. 如图:同步, 非阻塞地要钱

 

             儿子 = 用户进程

             老子 = linux内核

             要钱 =  recv

             妈的,还在准备 = EWouldBlock

       

 

        3. 如图:同步, 刺探性地要钱

 

             儿子 = 用户进程

             老子 = linux内核

             有钱吗?= select

             要钱 =  recv

       

        4.  用得不多, 本文先不说。

 

        5. 如图: 异步要钱

 

             儿子 = 用户进程

             老子 = linux内核

             要钱 = aio_read

             通知儿子拿到钱 =  发送消息, 触发回调函数

 

       在linux中, 有5中I/O模型, 分别与上述五种要钱方式对应, 也即是:

       1. 同步, 阻塞IO            ------ 儿子要焦急等待老子准备钱, 焦急等待拿到钱

       2. 同步, 非阻塞IO        ------ 儿子立即知道是否有钱, 但要反复催要, 焦急等待拿到钱

       3. 同步, 多路复用IO    ------  儿子要焦急等待老子准备钱, 焦急等待拿到钱

       4. 同步, 信号驱动IO    ------  本文先不说

       5. 异步IO                        ------ 儿子立即知道是否有钱, 也不用焦急等待拿到钱, 而是边泡妞, 边等待老子汇钱, 两全其美

 

       好的, 先说到这里了, 想必大家对五种IO模型, 异步和非阻塞的区别有所了解了。 实际上, 在非阻塞模式中, 第一个过程是非阻塞的, 第二个过程是阻塞的, 所以, 总体体现为阻塞, 这就有点同步的感觉了。

 

       本文就先扯淡到这里, 后续我们会进行更深入的分析, 到时再一起嗨奋斗

       就这样。

 

 

 

 

 

这篇关于儿子该如何找老子要钱------浅聊linux中的5种I/O模型并顺便说说异步和非阻塞的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/684470

相关文章

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Go之errors.New和fmt.Errorf 的区别小结

《Go之errors.New和fmt.Errorf的区别小结》本文主要介绍了Go之errors.New和fmt.Errorf的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考... 目录error的基本用法1. 获取错误信息2. 在条件判断中使用基本区别1.函数签名2.使用场景详细对

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet