全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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

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

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

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

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

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

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

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

<?php
$fp = fopen("lock.txt", "w+");
if(flock($fp,LOCK_EX))
{
//..处理订单
flock($fp,LOCK_UN);
}
fclose($fp);
?>

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

<?php
$fp = fopen("lock.txt", "w+");
if(flock($fp,LOCK_EX | LOCK_NB))
{
//..处理订单
flock($fp,LOCK_UN);
}
else
{
echo "系统繁忙,请稍后再试";
}
fclose($fp);
?>

同步、异步和阻塞、非阻塞是组合关系,因此有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))

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

select、poll、epoll 区别总结:

1、单进程最大连接数:

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

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

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

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模型就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# socket  # 同步  # 异步  # 浅谈python中真正关闭socket的方法  # 浅谈python socket函数中  # send与sendall的区别与使用方法  # 浅谈socket TCP编程中connect的一些坑  # 浅谈java socket的正确关闭姿势  # socket连接关闭问题分析  # 连接数  # 回调  # 才会  # 遍历  # 情况下  # 给大家  # 四种  # 来实现  # 都是  # 会有  # 是因为  # 才是  # 调用者  # 是指  # 其他的  # 它是  # 也可  # 希望能  # 都很  # 会对 


相关文章: 建站之星代理费用多少?最新价格详情介绍  如何用PHP快速搭建CMS系统?  网站制作新手教程,新手建设一个网站需要注意些什么?  如何在IIS7上新建站点并设置安全权限?  如何快速搭建高效WAP手机网站?  广州营销型建站服务商推荐:技术优势与SEO优化解析  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何在搬瓦工VPS快速搭建网站?  如何自定义建站之星模板颜色并下载新样式?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  建站主机服务器选型指南与性能优化方案解析  模具网站制作流程,如何找模具客户?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  股票网站制作软件,网上股票怎么开户?  太平洋网站制作公司,网络用语太平洋是什么意思?  小程序网站制作需要准备什么资料,如何制作小程序?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  图册素材网站设计制作软件,图册的导出方式有几种?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  如何在服务器上配置二级域名建站?  想学网站制作怎么学,建立一个网站要花费多少?  如何通过VPS搭建网站快速盈利?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  如何通过.red域名打造高辨识度品牌网站?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  如何通过VPS建站无需域名直接访问?  大同网页,大同瑞慈医院官网?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  公司网站设计制作厂家,怎么创建自己的一个网站?  常州企业建站如何选择最佳模板?  如何通过建站之星自助学习解决操作问题?  建站主机服务器选购指南:轻量应用与VPS配置解析  C#如何使用XPathNavigator高效查询XML  浅谈Javascript中的Label语句  建站之星代理平台如何选择最佳方案?  seo网站制作优化,网站SEO优化步骤有哪些?  已有域名和空间,如何快速搭建网站?  建站之星安装提示数据库无法连接如何解决?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  Swift中swift中的switch 语句  如何在景安云服务器上绑定域名并配置虚拟主机?  如何彻底卸载建站之星软件?  如何选择高效便捷的WAP商城建站系统?  盐城做公司网站,江苏电子版退休证办理流程?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  如何用已有域名快速搭建网站?  如何在阿里云完成域名注册与建站?  如何通过wdcp面板快速创建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。