套接字同步和异步阻塞和非阻塞I/O模型

套接字同步和异步阻塞和非阻塞I/O模型
网络编程中,往往有四种方式调用同步(同步)或异步(异步),阻塞(block)/非阻塞(阻塞)

同步/异步主要用于C端:

同步:当C端发送一个函数调用时,C端在未得到结果之前就死了。

例如:普通的B/S模式(同步):提交请求>等待服务处理gt在返回客户端浏览器过程中不能做任何事情。

异步:在发送了C方的异步进程调用之后,调用方不会立即得到结果。当实际处理这个调用的部分完成时,调用者将被状态、通知和回调通知。

例如:Ajax(异步请求):服务器(浏览器可以触发事件,其他)>处理,Ajax回调处理结果

阻塞/非阻塞主要针对s侧:

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

< PHP
$ FP = fopen(锁。txt
如果(羊群($ FP,lock_ex))
{
…处理订单
羊群($ FP,lock_un);
}
Fclose($ FP);
>
非阻塞(立即返回):该函数不会阻塞当前线程,直到结果不立即获得,而且它立即返回,效率高,适合于高并发性。

< PHP
$ FP = fopen(锁。txt
如果(羊群($ FP,lock_ex | lock_nb))
{
…处理订单
羊群($ FP,lock_un);
}
其他的
{
系统忙,请稍后再试。
}
Fclose($ FP);
>
同步、异步和阻塞和非阻塞是组合关系,所以有4种方法

同步阻塞,同步无阻塞,异步阻塞,异步非阻塞

Linux有五种I/O模型。

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

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

3)I/O重用(选择和轮询)(I/O多路复用)

4)信号驱动我 / O(信号驱动我 / O(SIGIO))

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

前四个是同步的,最后一个是异步IO。

选择,投票,epoll的区别总结:

1。单个进程连接的最大数量:

选择那一个进程可以打开的最大连接数有一个fd_setsize宏定义

轮询:轮询与选择基本上没有什么不同,但它没有最大连接数的限制,因为它是基于链表的。

Epoll:虽然连接数有一个上限,这是非常大的。1G内存机可以打开约10万的连接,而2G内存机可以打开约20万的连接。

2,文件描述符(FD)急剧增加引起的IO效率问题。

选择:每次调用文件描述符(FD)时,我们将线性地连接该连接。因此,随着FD的增加,会导致慢遍历的线性下降性能问题。

民意调查:同上。

根据epoll:每个FD实现回调函数,只有积极的插座会主动调用回调函数,所以在不活跃的插座的情况下,使用epoll的线性下降,性能问题不在他们面前,但所有的插座都非常活跃,可能会有性能问题。

三.消息传递模式

选择:内核需要将消息传递给用户空间,所有这些都需要内核复制操作

民意调查:同上。

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

总结:

综上所述,选择,投票,epoll应根据具体使用情况和这三种方式的特点。

1、epoll的性能表面上是最好的。然而,当连接数和连接是非常活跃的,选择和调查的性能可能优于epoll。毕竟,epoll通知机制需要很多函数回调。

2,选择是低效的,因为每次都需要轮询。但是效率低是相对的,取决于情况,并且可以通过良好的设计来改进。

以上是关于socket同步和异步、阻塞和非阻塞。我 / O模型是萧边分享你的全部内容。我希望能给你一个参考,希望你能支持它。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部