位置: 编程技术 - 正文

浅谈socket同步和异步、阻塞和非阻塞、I/O模型

编辑:rootadmin

推荐整理分享浅谈socket同步和异步、阻塞和非阻塞、I/O模型,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

在进行网络编程时,常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式

同步/异步主要针对C端:

同步:c端发出一个功能调用时,在没有得到结果之前,c端死等结果

例如:普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事

异步:c端一个异步过程调用发出后,调用者不会立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

例如:ajax请求(异步): 事件触发->服务器处理(浏览器可做其他的)->处理完毕,ajax回调函数处理结果

阻塞/非阻塞主要针对S端:

阻塞(等待):阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回,效率低

非阻塞(立即返回):指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回,效率高,适合高并发

同步、异步和阻塞、非阻塞是组合关系,因此有4种方式:

同步阻塞、同步非阻塞、异步阻塞、异步非阻塞

linux有五种I/O模型

1)阻塞I/O(blocking I/O)

2)非阻塞I/O (nonblocking I/O)

3)I/O复用(select 和poll) (I/O multiplexing)

4)信号驱动I/O (signal driven I/O (SIGIO))

5)异步I/O (asynchronous I/O (the POSIX aio_functions))

浅谈socket同步和异步、阻塞和非阻塞、I/O模型

前四种都是同步,只有最后一种才是异步IO

select、poll、epoll 区别总结:

1、单进程最大连接数:

select:单个进程所能打开的最大连接数有FD_SETSIZE宏定义

poll:poll本质上和select没有区别,但是它没有最大连接数的限制,原因是它是基于链表来存储的

epoll:虽然连接数有上限,但是很大,1G内存的机器上可以打开万左右的连接,2G内存的机器可以打开万左右的连接

2、文件描述符(FD)剧增后带来的IO效率问题

select:每次调用文件描述符(FD)时都会对连接进行线性遍历,所以随着FD的增加会造成遍历速度慢的"线性下降性能问题"

poll:同上

epoll:根据每个fd上的callback函数来实现的,只有活跃的socket才会主动调用callback,所以在活跃socket较少的情况下,使用epoll没有前面两者的线性下降的性能问题,但是所有socket都很活跃的情况下,可能会有性能问题。

3、 消息传递方式

select:内核需要将消息传递到用户空间,都需要内核拷贝动作

poll:同上

epoll:epoll通过内核和用户空间共享一块内存来实现的。

总结:

综上,在选择select,poll,epoll时要根据具体的使用场合以及这三种方式的自身特点。

1、表面上看epoll的性能最好,但是在连接数少并且连接都十分活跃的情况下,select和poll的性能可能比epoll好,毕竟epoll的通知机制需要很多函数回调。

2、select低效是因为每次它都需要轮询。但低效也是相对的,视情况而定,也可通过良好的设计改善

以上这篇浅谈socket同步和异步、阻塞和非阻塞、I/O模型就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持积木网。

浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别 Sphinx是一个基于SQL的全文检索引擎;普遍使用于很多网站Sphinx的特性如下:a)高速的建立索引(在当代CPU上,峰值性能可达到MB/秒);b)高性能的搜索(在2?4G

redis查看连接数及php模拟并发创建redis连接的方法 max_redis.phpphpset_time_limit(0);for($i=1;$i=;$i++){exec("nohupphp/var/www/html/big/link_redis.php/dev/null&");}link_redis.phpphpset_time_limit(0);$redis=newredis();$redis-pconnect('localhost',

PHP+Ajax 检测网络是否正常实例详解 本文实例讲述了PHP+Ajax实时自动检测是否联网的方法。分享给大家供大家参考。具体实现方法如下:html部分代码:!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional

标签: 浅谈socket同步和异步、阻塞和非阻塞、I/O模型

本文链接地址:https://www.jiuchutong.com/biancheng/296372.html 转载请保留说明!

上一篇:PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)(php curl_init)

下一篇:浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别(浅谈如何培养孩子的注意力)

  • 增值税发票综合服务平台验证口令失败
  • 非正常损失的货物,增值税做什么科目
  • 个体工商户增值税怎么计算
  • 小规模能否开利息专用发票?
  • 开民工工资专户
  • 没有报关单可以结汇吗
  • 高档化妆品增值税税率是13%
  • 车船税在备注栏怎么报表
  • 财务上大写的元怎么写
  • 退回的税款如何做账
  • 土地闲置费是否可以税前扣除
  • 预算管理的方法及应用
  • 商业承兑汇票可以提前承兑吗
  • 供应链公司的组织架构图
  • 进口一批原材料,海关核定的关税完税价格
  • 受托委托加工物资成本包括什么
  • 材料成本和加工费含税吗
  • 餐饮企业卖套餐赠送单品要交增值税吗?
  • 退货后发票还能拿去抵税吗
  • 税务局返还的代征代扣要交增值税吗
  • 公司奖励旅游算休年假吗
  • 税控盘额度
  • 增值税留抵退税怎么记账
  • 已开票不确认收入未收款怎么做账
  • 可引导的macos
  • searchnav.exe - searchnav是什么进程 有什么用
  • vue2.0解决跨域问题
  • Win10 21H1 Build 19043.1200(KB5005101)预览版更新了哪些内容(附更新日志)
  • 工厂采购部门
  • 转出固定资产账务处理
  • 员工交通补贴需要发票吗
  • 黄喉蜂虎鸟是保护动物吗
  • 计提工会经费会计账务处理
  • 建信信托介绍
  • 刚购入的固定资产怎么算
  • 开发成本怎么做分录
  • 侧边导航栏点击后再展开
  • 个税计税周期 一年
  • 第二季度所得税可以弥补以前年度亏损吗
  • 现金流量表填写说明
  • mysql如何打开使用
  • 老生常谈的近义词
  • 购买财务软件怎么做凭证
  • 核定征收所得税税率是多少
  • 设备租赁公司怎么样
  • 完税证明和纳税证明一样吗
  • 开出增值税发票确认收入分录?
  • 本年利润的会计分录怎么写
  • 贷款减值准备是什么意思
  • 股东借款转实缴资本
  • 发票怎么跨月作废申请
  • 工厂宿舍水电费怎么扣
  • 购进生产设备的进项税额抵扣政策
  • 什么发票可以抵扣税
  • 工业企业建立账套
  • 查询一个字段有哪些值
  • Navicat for MySQL(mysql图形化管理工具)是什么?
  • SQL Server2005、2008如何彻底删除卸载并重新安装?
  • win8系统怎么查看隐藏文件
  • 如何更改centos的语言
  • 如何关闭windows8的密码
  • ubuntu命令联网
  • ubuntu zed
  • mac 照片导入项目没反应
  • hpzts04.exe是什么进程 有什么作用 hpzts04进程查询
  • freelibrary 程序崩溃
  • windows8 应用商店
  • bootstrap table sum总数量统计实现方法
  • ExtJs3.0中Store添加 baseParams 的Bug
  • jquery跳出循环
  • Animation.setFillAfter and Animation.setFillBefore的作用
  • jqueryui easyui
  • python标准模板库
  • js 箭头表达式
  • shell实现的实验步骤
  • python网络爬虫的流程图
  • python中简单的例子
  • 电子税务局实名认证
  • 车船税申报表样本
  • ca认证登录不了
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设