社区
Linux/Unix社区
帖子详情
sock编程中I/O复用机制
huangqinqin
2009-09-25 11:20:52
最近在编写一些sock程序,客户端和服务端要用到I/O复用机制,但对这个I/O复用不是很明白。
我真心请教各位。特别是这个复用,不是很懂
...全文
297
18
打赏
收藏
sock编程中I/O复用机制
最近在编写一些sock程序,客户端和服务端要用到I/O复用机制,但对这个I/O复用不是很明白。 我真心请教各位。特别是这个复用,不是很懂
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
netxuning
2009-10-09
打赏
举报
回复
学习,帮顶!
wen287877566
2009-10-03
打赏
举报
回复
这个楼主还必须注意一点就是防止sokect通讯失败,因为你频繁创建的时候都是针对一个端口的操作,当上一次的通讯句柄还没有被完全关闭的时候就来下一个sokect通讯,这样会造成有些通讯的失败,所以每次通讯要确保关闭通讯句柄,这样就会保证通讯的质量
猫已经找不回了
2009-10-02
打赏
举报
回复
select会循环遍历它所监测的fd_set(一组文件描述符(fd)的集合)内的所有文件描述符对应的驱动程序的poll函数。驱动程序提供的poll函数首先会将调用select的用户进程插入到该设备驱动对应资源的等待队列(如读/写等待队列),然后返回一个bitmask告诉select当前资源哪些可用。当select循环遍历完所有fd_set内指定的文件描述符对应的poll函数后,如果没有一个资源可用(即没有一个文件可供操作),则select让该进程睡眠,一直等到有资源可用为止,进程被唤醒(或者timeout)继续往下执行。
select会遍历所有的fd,但是我不是指它是死循环。遍历是为了给每个fd的poll作排队。
我说的不停扫描是对epoll比较的,select需要扫描所有的fd的poll一遍,而epoll是不需要的。
csan
2009-09-30
打赏
举报
回复
[Quote=引用 8 楼 guosha 的回复:]
不要从字面上去理解复用,
multiplexing的直接翻译意为多路技术。
为什么要用select?
因为你需要同时监控多个句柄是否可读或可写,而你又无法预料是哪一个句柄会先可读或可写。
select的机制?
我猜大致如下:
进程会调用select之后,内核会建立一个表,维护这个进程感兴趣的文件句柄,然后把进程置于挂起状态。任何一个句柄状态的变化都会引起一次中断,内核在处理这个中断的时候,就会查询哪个进程对这个句柄状态感兴趣,然后把相应的进程置为就绪态,也就表现为你的select返回了。对超时的处理也大致类似,会有时间中断。
[/Quote]
支持此说法!
rockefeller8
2009-09-30
打赏
举报
回复
不用阻塞资源的那种模式
windriver3
2009-09-28
打赏
举报
回复
[Quote=引用 8 楼 guosha 的回复:]
不要从字面上去理解复用,
multiplexing的直接翻译意为多路技术。
为什么要用select?
因为你需要同时监控多个句柄是否可读或可写,而你又无法预料是哪一个句柄会先可读或可写。
select的机制?
我猜大致如下:
进程会调用select之后,内核会建立一个表,维护这个进程感兴趣的文件句柄,然后把进程置于挂起状态。任何一个句柄状态的变化都会引起一次中断,内核在处理这个中断的时候,就会查询哪个进程对这个句柄状态感兴趣,然后把相应的进程置为就绪态,也就表现为你的select返回了。对超时的处理也大致类似,会有时间中断。
[/Quote]过程大概差不多,linux下是把进程挂在设备对应的等待队列上的。
ruifengzhangyi2
2009-09-27
打赏
举报
回复
如果你是大四的学生,建议你还是打好基础再说,你问的那个已经属于比较高级的技术了,把数据结构和c的基础打好比什么都强。因为你还要考6级嘛。
HULIHONG
2009-09-27
打赏
举报
回复
顶一下,顺便学习。
wangzhanchuan
2009-09-27
打赏
举报
回复
如果一个或多个I/O条件满足(例如,输入已准备好被读,或者描述字可以承接更多的输出时)时,我们就被通知到,这个能力被称为I/O复用。
rzsheng
2009-09-27
打赏
举报
回复
来学习的
快乐田伯光
2009-09-27
打赏
举报
回复
不要从字面上去理解复用,
multiplexing的直接翻译意为多路技术。
为什么要用select?
因为你需要同时监控多个句柄是否可读或可写,而你又无法预料是哪一个句柄会先可读或可写。
select的机制?
我猜大致如下:
进程会调用select之后,内核会建立一个表,维护这个进程感兴趣的文件句柄,然后把进程置于挂起状态。任何一个句柄状态的变化都会引起一次中断,内核在处理这个中断的时候,就会查询哪个进程对这个句柄状态感兴趣,然后把相应的进程置为就绪态,也就表现为你的select返回了。对超时的处理也大致类似,会有时间中断。
huangqinqin
2009-09-27
打赏
举报
回复
那I/0 复用也就是:通过select决定谁用I/O 这个意思吗?
小菜_默
2009-09-26
打赏
举报
回复
学习中、、、
路漫漫其修远.
2009-09-26
打赏
举报
回复
那个REUSED 我看到的主要作用是这样的,比如你开了一个socket,并占用了某个端口。但你关闭连接的时候,那个端口不会马上空闲出来,可能哪个端口号要过一段时间才能够被新的socket来用。如果你setopt设置了端口复用REUSED,那么只要本次连接断开,端口就会马上空闲出来,而不需要等待多长时间才能用。
yuelijun922
2009-09-26
打赏
举报
回复
好比一家10个人就一俩自行车,平时自行车就在那放着,家里有谁要用了,自行车就给谁用
快乐田伯光
2009-09-26
打赏
举报
回复
select肯定不是去不停的扫描啦,如果是不停的扫描跟死循环有什么差别?
[Quote=引用 3 楼 hairetz 的回复:]
复用最基本的就是select.
道理就是你socket建立多个连接,自然就有多个fd,select会不停扫描每个fd,发现有可读或者可写,就会进入相应的代码段。
跟switch差不多啦。
自己找个例子来照着用不就知道了。
更优秀的有epoll,不过比select复杂些。
[/Quote]
猫已经找不回了
2009-09-26
打赏
举报
回复
复用最基本的就是select.
道理就是你socket建立多个连接,自然就有多个fd,select会不停扫描每个fd,发现有可读或者可写,就会进入相应的代码段。
跟switch差不多啦。
自己找个例子来照着用不就知道了。
更优秀的有epoll,不过比select复杂些。
steptodream
2009-09-26
打赏
举报
回复
有点难呀 帮楼主顶下 等牛人给你解答
网络
编程
I/O
复用
方法详解
声明:本文转载自- Anker's Blog博客园 - select、poll、epoll之间的区别总结 http://www.cnblogs.com/Anker/p/3265058.html 原作者对I/O
复用
分析的详尽,值得借鉴 select,poll,epoll都是IO多路
复用
的
机制
。I/O多路
复用
就通过一种
机制
,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就
Unix/Linux网络
编程
实验8:I/O
复用
编程
(python版)
I/O多路
复用
的概念 I/O模型 I/O模型提供了一种
机制
,一个或多个I/0条件满足时就被通知是哪种模型。 I/O模型类型 将一个输入操作分为两个不同的阶段: (1)等待数据准备好。 (2)从内核到进程拷贝数据。 根据在这两个阶段的不同表现,I/O模型分为5种不同的类型 即阻塞I/O、非阻塞I/O、I/0
复用
、信号驱动I/O和异步I/O。 I/O
复用
由此需要这样的能力:如果一个或多个I/O条件满足( 如输入已准备好被读,或描述字可以承接更多的输出)时,就被通知到。这个能力被称为I/0
复用
. 更
阻塞I/O、非阻塞I/O、I/O
复用
、信号驱动I/O、异步I/O
一、POSIX定义的同步与异步I/O: 可移植操作系统接口(英语:Portable Operating System Interface,缩写为POSIX)把同步I/O定义为导致进程阻塞直到I/O完成的操作,反之则是异步 实际上操作系统大多数时候采用的都是同步I/O 二、I/O是缓慢的 I/O操作绝对是计算机操作
中
中
最慢的,例如访问RAM可以达到纳秒(ns)级别,的传输速度一般为GB/s,而在磁盘或网络上访问时(I/O),消耗的时间级却是毫秒(ms)级别的,传输速度MB/s起步,乐观情况下能达到GB/s。
I/O
复用
—— select
作者前言:在学习i/o
复用
前,我们要清楚为什么要引出I/O
复用
,它的的作用是什么?什么是I/O
复用
?I/O
复用
是怎么实现的? ------- 想一想噢~ 下面我来解释一下这些问题 I/O
复用
的作用 从进程线程的学习,到多进程多线程,再到进程池线程池,我们处理事件的效率越来越高,但是却有一个问题,一直都没有解决,那就是,当服务器分配了一个线程或进程为某一个客户端服务时,该进程...
UNIX网络
编程
——I/O
复用
(select、poll)
1、五种I/O模型: (1)阻塞式I/O;(2)非阻塞式I/O;(3)I/O
复用
(select、poll);(4)信号驱动式I/O(SIGIO);(5)异步I/O(aio_系列函数); 一个输入操作分为两个阶段:A. 等待数据准备好;B. 从内核向进程复制数据。 一个套接字上的输入也类似,A. 等待数据从网络
中
到达(所等待分组到达时,会被复制到内核
中
的某个缓
Linux/Unix社区
23,121
社区成员
74,508
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章