Linux IO多路复用模型 什么是流 什么是IO操作 阻塞与非阻塞模型 阻塞 解决阻塞死等待的办法 办法一:非阻塞、忙轮询 办法二:select 办法三:epoll Select和Poll模式 Epoll...使用epoll编程主流程骨架 epoll的触发模式 水平触发(LT) 边缘触发(ET) 简单的epoll服务器(C语言) Linux网络Server的N种并发模型 模型一、单线程Accept(无IO复用...这里就不展开讲述了: Redis原理篇之网络模型 ---- Epoll模式 详细也是参考下面这篇文章,本文再对Epoll做出一些小补充说明: Redis原理篇之网络模型 ● 与select,poll一样,对I/O多路复用的技术...[recv] %s\n", recvline); break; } } } return 0; } ---- Linux...此时依旧是由主线程利用epoll或者select等IO多路复用模型,来监控客户端连接,和客户端socket的读写事件。线程池中的线程只是负责处理主线程读取出来的消息。
I/O多路复用 前言 文本相关参考资料及部分内容来源 《Linux高性能服务器编程》 《TCP/IP网络编程》 《Linux/UNIX系统编程手册》 ---- I/O多路复用核心思想为...通常,网络程序在下列情况下需要使用I/O多路复用技术。 客户端程序需要同时处理多个socket。 客户端程序要同时处理用户输入和网络连接。...---- epoll epoll是Linux特有的I/O复用函数。它在实现和使用上与select和poll有很大的差异。 epoll使用一组函数来完成任务,而不是单个函数。...---- 代码示例 仅部分核心代码示例: 完整的可以去《Linux高性能服务器编程》源代码9-4查看 主线程中循环监听事件 while( 1 ){ int ret = epoll_wait
/* * uart 打开分析 * * 问题: 当应用程序调用open系统调用函数,那么是如何open串口的?
虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接通常特指那些与RS-232标准兼容的硬件或者调制解调器的接口。废话少讲,今天来解剖使用串口时的编程代码细节。...上面的代码是使用串口的第一步,来解释下都是啥意思。...来瞧瞧: 第21-22行,定义了一个用来配置串口属性的结构体: struct termios serial; bzero(&serial, sizeof(serial)); 第24行,将串口设置为raw...cfsetispeed(&serial, B9600); cfsetospeed(&serial, B9600); 第28-32行,设置串口控制属性(c_cflag),其中: serial.c_cflag...: tcsetattr(fd,TCSANOW,&serial); 当然,上面的 fd 就是系统中的某一个你想要设置的成上面那样的属性参数的串口,比如就拿粤嵌GEC210开发板来说,他有四个串口,其中第一个就已经被用于终端控制了
IO 操作,然后进入阻塞或轮询判断的状态,这其实对性能损耗很大,阻塞等待 IO 拷贝返回时,用户线程不能执行后面的逻辑流,非阻塞则是开启线程轮询判断,对 CPU 消耗比较大,所以才有了我们后面的 IO 多路复用...select 多路复用 IO 模型 先解释一个Linux中文件描述符的概念,通过文件描述符,可以找到文件指针,从而进入打开文件表,文件表里有很多关于文件的相关信息。...关于Linux的IO多路复用模型还有 poll 和 epoll ,这里说一下它们之间的区别,poll 可监视的 IO数量大于 select,而 epoll 和其他两个函数的区别就是不会轮询文件描述符来操作...当一个IO完毕就直接通知刷新,而不是一直轮询判断可读写的状态来刷新,简单的说,epoll 只会刷新已经成功的 IO,而其他两个函数判断 IO 是否已成功是用轮询的方式,细心的朋友会发现,我们的这个 IO 多路复用好像也没有比阻塞或非阻塞...IO 模型强到哪去,而且还要往函数里添加 socket 监听回调,IO 多路复用的核心就在于同一时刻一个逻辑流也就是一个线程可以监听操作多个 IO,而其他 IO 模型只能通过多线程来进行多个 IO 的需求
这是一个 BSD 扩展; 它只存在于 BSD 系统和 GNU/Linux 和 GNU/Hurd 系统上。...该位仅存在于 BSD 系统和 GNU/Hurd 系统上; 在 GNU/Linux 系统上,它可以作为 XTABS 使用。...这是一个 BSD 扩展,仅存在于 BSD 系统和 GNU/Linux 和 GNU/Hurd 系统中。...这是一个 BSD 扩展,仅存在于 BSD 系统和 GNU/Linux 和 GNU/Hurd 系统中。...这是一个 BSD 扩展,仅存在于 BSD 系统和 GNU/Linux 和 GNU/Hurd 系统中。
最近在了解嵌入式方面的知识,就随笔记录一下: 查看Linux本机串口: 1、查看串口是否可用 可以对串口发送数据比如对com1口,echo /dev/ttyS0 2、查看串口名称使用 ls...-l /dev/ttyS* 一般情况下串口的名称全部在dev下面,如果你没有外插串口卡的话默认是dev下的ttyS*,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然的; 3、...查看串口驱动 cat/proc/tty/drivers/serial 4、查看串口设备 dmesg | grep ttyS* 5、查一下板子上的串口有没有设备 grep tty/proc.../dev下应该有一个USB串口:/dev/ttyUSB0. 当一个串行卡或数据卡被侦测到时,它会被指定成为第一个可用的串行设备。...PC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC; 串口使用: 如果需要查看这个串口设备输出: cat ttyUSB0 如果需要对这个设备输入: echo yaoxu > ttyUSB0
epoll简介 epoll 是Linux内核中的一种可扩展IO事件处理机制,最早在 Linux 2.5.44内核中引入,可被用于代替POSIX select 和 poll 系统调用,并且在具有大量应用程序请求时能够获得较好的性能...当创建好epoll句柄后,它就是会占用一个fd值,在linux下如果查看/proc/进程id/fd/,是能够看到这个fd的,所以在使用完epoll后,必须调用close() 关闭,否则可能导致fd被耗尽...select支持的句柄数是有限制的, 同时只支持1024个,这个是句柄集合限制的,如果超过这个限制,很可能导致溢出,而且非常不容易发现问题, TAF就出现过这个问题, 调试了n天,才发现:)当然可以通过修改linux
查看Linux本机串口: 1、查看串口是否可用 如果需要查看这个串口设备输出: cat ttyUSB0 如果需要对这个设备输入: echo yaoxu > ttyUSB0 常用的调试工具有: minicom...cutecom Linux系统可视化串口应用软件,使用上与Windows系统串口调试工具。 picocom 效果上类似 minicom 的精简版,设置比较简单,还可以有背景颜色。...PC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC; 串口权限问题 临时调试解决 在使用串口进行通信时,经常需要使用指令来赋予用户读写的权限 $ sudo chmod 777 /dev...查看linux所有用户 使用 /etc/passwd 文件 使用任何一个像 cat、more、less 等文件操作命令来打印 Linux 系统上创建的用户列表。.../etc/passwd 是一个文本文件,其中包含了登录 Linux 系统所必需的每个用户的信息。
/*和read的分析过程一样, 我们首先分析tty_write*/ /*最重要的就是do_tty_write函数。 前面都是一些合法性判断*/ static ...
/*串口read函数分析 * 当应用程序调用read系统调用时,会调用tty_fops中的tty_read * 接下来分析tty_read函数 * * 其中最重要的就是ld->ops->read(tty...* 那么当我们的串口有数据的话,当然就调用我们以前注册的rx中断函数了。...unsigned int ufcon, ch, flag, ufstat, uerstat; int max_count = 64; while (max_count-- > 0) { /*读取UFCON串口配置寄存器...*/ ufcon = rd_regl(port, S3C2410_UFCON); /*读取 UFSTAT串口状态寄存器。...UERSTAT_OVERRUN, ch, flag); } /*这是才将整个数据送tty->read_buf中去*/ tty_flip_buffer_push(tty); } /* 将串口产生的数据送进
简介 嵌入式Linux下串口编程与Linux系统下的编程没有什么区别,系统API都是一样的。...嵌入式设备中串口编程是很常用的,比如会对接一些传感器模块,这些模块大多是RS232或者RS485接口,对于软件层面上来说,RS232与RS48区别不大。...RS232与RS485在使用上的区别,RS232是全双工的,只能对接一个设备串口设备。RS485是半双工的总线协议,一般可以挂多个传感器设备,半双工的意思是同时只能有一个设备向串口发数据。...用到的API函数 函数 说明 open 打开设备,用于打开串口设备 fcntl 修改设备描述符属性参数 isatty 检测打开的描述符是否指向一个终端 tcgetattr 用来获取串口终端参数 cfmakeraw...将终端设置为原始模式,该模式下所有的输入数据以字节为单位被处理 tcflush 用于清空输入、输出缓冲区 tcsetattr 设置串口终端参数 read 读取数据 write 写数据 close 关闭串口设备
提出问题 在Linux编程中,一切皆文件,往往是对一个文件进行操作,比如说串口,和传感器打交道,一般情况下就是一来一去,一收一发,但是,如果我有多个传感器,而传感器之间又有关联,我想同时监控一个或者多个以上的文件描述符...解决问题 Linux健全的API已经为我们提供了解决问题的方法,在此我们引入select()函数、poll函数。...[Linux就是这样的系统!你会发现sizeof(fd_set)的结果是128(*8 =FD_SETSIZE=1024) 尽管很少你会遇到这种情况。]...[在Linux中,timeout指的是程序在非sleep状态中度过的时间,而不是实际上过去的时间,这就会引起和非Linux平台移植上的时间不等问题。...移植问题还包括在System V风格中select()在函数退出前会把timeout设为未定义的NULL状态,而在BSD中则不是这样,Linux在这点上遵从System V,因此在重复利用timeout
目录 1、说明 1.1、多路复用的几种机制 2、函数简介 2.1、select 2.2、poll 2.3、epoll 2.3.1、epoll_create 2.3.2、epoll_ctl 2.3.3...我们都知道,linux下一个线程默认所占的内存是8M(可以使用ulimit -s查看),那么加入,1000个socket连接,建立1000线程,光线程的开销就高达8G多,更遑论其他业务还要使用内存了。...针对这种情况,就需要采用多路复用机制,所谓多路复用,就是一个进程见识多个socket描述符,一旦某个socket描述符就绪(可读写或者异常)了,就会通知应用程序,进行相应的处理。...1.1、多路复用的几种机制 目前的多路复用机制有三种,select、poll 和 epoll。...3.2、优缺点 监听数量不受限制,理论上上限是最大可以打开的文件数目,这个数目一般远大于2048,linux上可以使用 cat /proc/sys/fs/file-max 命令查看。
Linux关于并发网络分为Apache模型(Process per Connection (进程连接) ) 和TPC , 还有select模型,以及poll模型(一般是Epoll模型) Select模型极其作用..., fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); 第一个参数 nfds: 第n个文件id的编号 (linux...下面是一个简单的多路复用的网络并发Select模型 1 #include 2 #include 3 #include 4 #include
/** * uart分析 * * 其实串口分析就两个重要的文件: S3c2440.c Samsung.c * * **/ /*1...其实每一个串口都对应一个uart_port结构 * 这里只初始化了tty_port结构。...KERN_ERR "s3c24xx_init_uarts: cpu has no uart init\n"); } else (cpu->init_uarts)(cfg, no); } /*初始化系统上的串口资源...用于初始化uart_port 3. s3c24xx_serial_ops: 硬件的操作集 4. s3c24xx_uart_info: 用于初始化uart_port 其实也就是:编写S3c2440.c这个串口文件
需求,为了有效地利用通信线路,希望一个信道同时传输多路信号,这就是所谓的多路复用技术(Multiplexing)。...最早我接触到的多路复用技术是在51单片机中,它的P1口在外接存储器的时候,要多路复用为数据总线和低8位的地址总线。复用信号是ALE引脚发出的,可以通过一个锁存器将地址信号存储起来。...这样就能实现多路复用。 在通信技术中,常使用一下的多路复用技术。...频分多路复用(FDM):各个用户占用不同的带宽(这个是指频率范围,单位是HZ) 时分多路复用(TDM):各个用户占据不同的时隙,这些时隙是固定的。和时间片轮转技术是相似的。...码分多路复用(CMD):CMD广泛应用于无线网络中。它给每个用户分配m比特的序列,这个序列是唯一的。因此,每个用户只需要利用各自的序列进行编码即可。
文章目录 一、多路复用技术 二、await 协程多路复用 三、Channel 通道多路复用 一、多路复用技术 ---- 在信号传输时 , 通信信道 的 带宽 远大于 传输单一信号的需求 , 在同一信道中可以同时传递...多路 信号 , 该技术成为 " 多路复用技术 " ; 二、await 协程多路复用 ---- 在 协程 中 , 可以通过 复用 多个 await 的方式 , 实现 多路复用 ; 使用场景 : 使用 不同的协程...kim.hsl.coroutine I 最终数据为 本地数据 22:03:53.176 System.out kim.hsl.coroutine I 获取网络数据 三、Channel 通道多路复用...---- Channel 通道多路复用 , 就是 多个 Channel 通道同时 传递消息 , 取传递消息最快的 Channel 通道中的信息 ; 代码示例 : package kim.hsl.coroutine
NIO 是一种同步非阻塞模型(Non-blocking IO),也是 IO 多路复用的基础。在了解 NIO 之前我们先回顾一下我们传统 IO 的相关知识。...上述模型的主要缺点就是: 过于依赖线程 线程的创建和销毁成本很高,在 Linux 这种系统中线程本质上就是一个进程。...NIO 的基础上加入了事件机制,程序会注册一组 socket 文件描述符给操作系统,然后监视这些 fd 是否有 IO 事件发生,如果有,程序会被通知,IO 多路复用的方式主要有 select、poll...CPU 的空转 信号驱动式 I/O 是指进程预先告知内核,使得当某个描述符上发生某个事件时,内核使用信号通知相关进程 异步 IO 不但等待就绪时非阻塞的,数据从网卡到内存的过程(操作)也是异步的 IO 多路复用...Reactor 通过 IO 多路复用我们可以实现一个线程处理多个 IO 操作,虽然单线程 IO 效率很高,没有上下文切换,但是在实际使用中单线程不可能满足我们的需求,后面就延伸出了 Reactor 模型
1、“I/O多路复用”这个坑爹翻译可能是这个概念在中文里面如此难理解的原因; 2、I/O多路复用,即:I/O multiplexing,这里面的 multiplexing 指的其实是在单个线程通过记录跟踪每一个...第二种方法就是I/O多路复用 (单个线程,通过记录跟踪每个I/O流(sock)的状态,来同时管理多个I/O流 。) 其实I/O多路复用这个坑爹翻译可能是这个概念在中文里面如此难理解的原因。...所谓的I/O多路复用在英文中其实叫 I/O multiplexing....可是epoll 有个致命的缺点,只有linux支持。于是其他的平台实现类型的多路复用,比如BSD上面对应的是kqueue, win下对应的iocp。...Nginx 异步,非阻塞,IO多路复用 Nginx 这样出众,正是他采用了异步,非阻塞,IO多路复用。 Nginx之前是单进程的。看下他的进程。1个master进程,2个work进程。
领取专属 10元无门槛券
手把手带您无忧上云