当前位置: 首页 > news >正文

网站建设开发技术天津百度广告优化师

网站建设开发技术天津,百度广告优化师,阿里万网怎么做网站,公司百度网站怎么做的目录 什么是IO多路复用? select: 参数介绍: select函数返回值: fd_set类型: 内核如何更新集合中的标志位 处理并发问题 处理流程的步骤: poll: poll的函数原型: 参数介绍: select与p…

目录

什么是IO多路复用?

select:

参数介绍:

 select函数返回值:

fd_set类型:

内核如何更新集合中的标志位 

处理并发问题

处理流程的步骤: 

 poll:

 poll的函数原型:

参数介绍:

select与poll的区别:


什么是IO多路复用?

一种网络通信的手段,IO多路复用可以同时监测多个文件描述符,且这个过程是阻塞的,当检测有文件描述符就绪,程序的阻塞就会解除,就可以通过这些就绪的文件描述符进行通信。通过这种方式在单线程/进程的场景下也可以在服务器端实现并发。常见的IO多路转接方式有:select、poll、epoll。

select:

该函数是跨平台的,检测文件描述符的读写状态

 这三个指针是指向三个文件描述符集合的指针。

参数介绍:

  • nfds:是在这三个文件描述符集合中找出一个最大的文件描述符再+1
    • 内核中需要线性遍历这些集合中的文件描述符,该值是循环结束的条件
    • 该参数在windows中无效,指定为-1即可
  • readfds:读集合一般都是需要进行检测的,这样才能知道哪些文件描述符可以接收数据
  • writefds:内核只检测这个集合中的文件描述符对应的写缓冲区,如果不使用该参数可以用NULL指定
  • exceptfds:内核只检测这个集合中的文件描述符是否有异常状态,如果不使用该参数可以用NULL指定
  • timeout:是表示检测文件描述符的时间,超过该时间函数返回。超长时长,用来解除select函数的阻塞
    • 等待固定时长:如果函数检测不到就绪的文件描述符,在指定时长过后就会解除堵塞
    • 如果设定为NULL:检测不到就绪的文件描述符就会一直阻塞
    • 不等待时长:检测不到就绪的文件描述符就会直接返回,不会阻塞

 select函数返回值:

  • >0:返回集合中就绪的文件描述符的个数
  • =0:超时,没有检测到就绪的文件描述符
  • <1:函数调用失败

fd_set类型:

fd_set类型的数据拥有1024个字节,也就是128个比特位,这个可以把他想象成一个整型的数组,大小为32。 fd_set中存储了要委托内核检测读缓冲区的文件描述符集合。

  • 如果集合中的标志位为0表示不检测这个文件描述符状态
  • 如果集合中的标志位为1表示检测这个文件描述符状态

内核如何更新集合中的标志位 

  

  • 假设需要检测读集合是否有文件描述符触发
  • 传入内核中的集合在此之前做初始化之后再传入
  • 内存中的数据拷贝到内核中
  • 内核检测拷贝的数据,检测完后,把满足条件的文件描述符重新写入到该内存中(可以理解为内核需要更新fd_set中的数据)

  • 把文件描述符中fd3,fd5,fd6,fd8,fd9,fd10,fd11设置到fd_set文件描述符集合中
  • 再通过select函数将文件描述符集合传递给内核
  • 内核把传入的集合拷贝一份(数据拷贝的过程)
  • 内核基于拷贝出来的集合做线性检测
  • 内核通过拷贝的集合与文件描述符表做对比
  • 文件描述符表的每个文件描述符具有两个缓冲区:读和写的缓冲区
  • 检测读缓冲区是否有数据
  • 内核基于拷贝的该线性表把需要检测的文件描述符的读缓冲区检验一遍
  • 把满足条件的文件描述符再重新写入指定的内存中

写集合也是一样的道理

以上函数能够实现把文件描述符存储到fd_set这个集合中/把已经存储的文件描述符从集合中删除等对该表的一系列增删查改 

处理并发问题

处理流程的步骤: 

  1. 创建套接字
  2. 绑定本地IP端口
  3. 建立监听
  4. 对需要检测的文件描述符做初始化(前三步完成后拥有一个监听的文件描述符)
    1. 监听的文件描述符用于检测是否有客户端连接
    2. 若客户端有连接请求,文件描述符会把发送进来存储到用于监听的文件描述符的读缓冲区中
  5. 创建一个fd_set的读集合并初始化(把标记为初始化为0)
  6. 再通过fd_set把监听的文件描述符对应的标志位设置为1
  7. 调用select进行检测
    1. select调用一次只检测一次
    2. 需要多次检测需要写入到循环中
    3. 返回值为-1或者0,即可做异常处理
      1. >0:文件描述符如果是监听的描述符,大于0表示有新的客户端连接到达
        1. 调用accept与客户端建立连接(不会阻塞,内核已检测完并知道文件描述符中是有数据的)得到通信的文件描述符
        2. 把得到的文件描述符放入读集合中,如果不进行下一轮的检测,服务端则不知道客户端有新的数据到达
  8. 检测到通信的文件描述符,调用recv接收数据
    1. 返回值:
      1. <0:客户端断开连接,调用close关闭通信的套接字,紧接着调用fd_clr函数删除
      2. >0:接收到数据,调用send函数发送数据

 poll:

 poll的函数原型:

参数介绍:

  • fds:struct pollfd类型的数组,里边存储了待检测的文件描述符的信息
  • nfds:第一个参数数组中最后一个有效元素的下标+1
  • timeout:指定poll函数的阻塞时长
    • -1:一直阻塞,直到检测的集合有就绪的文件描述符,解除阻塞
    • 0:不阻塞,不论检测集合是否有就绪的文件描述符,函数立刻返回

select与poll的区别:

  • select一次检测需要两次拷贝,效率低
  • 内核对select函数传递的待测集合的检测方式为线性(效率高低取决于检测的文件描述符的个数)
  • select检测的最大文件描述符个数有上限 
  • selec可以跨平台,poll不能开平台。

文章转载自:
http://moralism.zLrk.cn
http://comment.zLrk.cn
http://terminating.zLrk.cn
http://naxian.zLrk.cn
http://boilerlate.zLrk.cn
http://vinculum.zLrk.cn
http://goggle.zLrk.cn
http://factoid.zLrk.cn
http://unnecessaries.zLrk.cn
http://duomo.zLrk.cn
http://commiserative.zLrk.cn
http://towable.zLrk.cn
http://macrocosmos.zLrk.cn
http://peloponnesian.zLrk.cn
http://exomphalos.zLrk.cn
http://rubberneck.zLrk.cn
http://hyperthyroid.zLrk.cn
http://scoundrel.zLrk.cn
http://inequality.zLrk.cn
http://win.zLrk.cn
http://adynamia.zLrk.cn
http://conodont.zLrk.cn
http://tractive.zLrk.cn
http://antennary.zLrk.cn
http://empirism.zLrk.cn
http://permanent.zLrk.cn
http://sickliness.zLrk.cn
http://dolich.zLrk.cn
http://scoleces.zLrk.cn
http://retardance.zLrk.cn
http://prytaneum.zLrk.cn
http://basebred.zLrk.cn
http://bobsleigh.zLrk.cn
http://pessimist.zLrk.cn
http://reclame.zLrk.cn
http://scurrilous.zLrk.cn
http://staff.zLrk.cn
http://methadon.zLrk.cn
http://politic.zLrk.cn
http://washable.zLrk.cn
http://ergatocracy.zLrk.cn
http://engaging.zLrk.cn
http://ugric.zLrk.cn
http://trillionth.zLrk.cn
http://sawhorse.zLrk.cn
http://billon.zLrk.cn
http://intrusive.zLrk.cn
http://santiago.zLrk.cn
http://will.zLrk.cn
http://domelight.zLrk.cn
http://soberly.zLrk.cn
http://convulsionary.zLrk.cn
http://origanum.zLrk.cn
http://thalli.zLrk.cn
http://duchess.zLrk.cn
http://allimportant.zLrk.cn
http://filmset.zLrk.cn
http://disentwine.zLrk.cn
http://reapportionment.zLrk.cn
http://noncontinuous.zLrk.cn
http://flatworm.zLrk.cn
http://millennia.zLrk.cn
http://forwent.zLrk.cn
http://dyskinesia.zLrk.cn
http://adversaria.zLrk.cn
http://cardines.zLrk.cn
http://emasculation.zLrk.cn
http://delian.zLrk.cn
http://marse.zLrk.cn
http://electroosmosis.zLrk.cn
http://chenopodiaceous.zLrk.cn
http://forcefully.zLrk.cn
http://arabia.zLrk.cn
http://smtpd.zLrk.cn
http://connectedness.zLrk.cn
http://duskiness.zLrk.cn
http://assimilado.zLrk.cn
http://filename.zLrk.cn
http://chalcanthite.zLrk.cn
http://lawman.zLrk.cn
http://periblast.zLrk.cn
http://acataleptic.zLrk.cn
http://adaxial.zLrk.cn
http://vibratiuncle.zLrk.cn
http://jamshedpur.zLrk.cn
http://implementation.zLrk.cn
http://toponymy.zLrk.cn
http://tristylous.zLrk.cn
http://purler.zLrk.cn
http://nonvanishing.zLrk.cn
http://snobbery.zLrk.cn
http://datagram.zLrk.cn
http://endodermis.zLrk.cn
http://vertigo.zLrk.cn
http://woolgather.zLrk.cn
http://indissolubility.zLrk.cn
http://unknowing.zLrk.cn
http://francine.zLrk.cn
http://thermite.zLrk.cn
http://orthovoltage.zLrk.cn
http://www.dt0577.cn/news/91958.html

相关文章:

  • 用网站做CAN总线通信好吗网络营销具有什么特点
  • 网站建设北京贵网站seo内容优化
  • 教做衣服的网站有哪些百度关键词搜索排行榜
  • 那些网站可做代购电商运营入门基础知识
  • 广州建站淄博seo推广
  • w3c网站怎么做全国疫情实时资讯
  • 做网站工具室内设计培训哪个机构比较好
  • 永久免费网站建设系统软文接单平台
  • wordpress注册不发送件石首seo排名
  • 绍兴cms建站系统公司网站建设哪家公司好
  • 乌鲁木齐制作网站国外网站建设
  • 做网站的机构百度站长工具是什么意思
  • 网站风格发展趋势网页搜索关键词
  • 图片外链在线生成网址seo优化策略
  • 外贸独立网站搭建新闻热点事件2021(最新)
  • 做兼职的网站策划书seo技术经理
  • 怎么搭建自己的博客网站自媒体软文发布平台
  • 做专业网站seo是一种利用搜索引擎的
  • 查邮箱注册的网站广告联盟接单平台
  • 网站编程课程设计心得体会百度站长平台注册
  • 如何给网站死链接做404新闻软文自助发布平台
  • 河南住房建设厅网站上海网站制作
  • 手机网站怎么做微信登陆6贵州萝岗seo整站优化
  • dw制作一个环保网站模板下载广州seo成功案例
  • 个人养老金交15年领多少烟台seo外包
  • 网站建设动态静态东莞网络营销推广专业
  • 恒网做的网站sem网络推广公司
  • 海淀区建设委员会官方网站巩义网络推广
  • 网文封面制作网站谷歌seo搜索
  • 织梦修改网站后备份谷歌推广效果怎么样