linux socket完成端口,“完成端口”模型(IOCP)

//

/// “完成端口”模型(IOCP)(基于重叠端口(异步)的LF线程池框架)

/// I/O完成端口是应用程序使用线程池来进行处理异步的I/O请求的一种机制。

/// 使用I/O完成端口比在I/O请求时创建线程更快更有效

/// 应用程序发出一些异步的I/O请求,当这些请求完成时,设备驱动将这些工作项目排序到完成端口

/// 这样在完成端口上等待的线程池,便可以处理这些完成的I/O

/// 首先,说说主线程:

/// 1.创建完成端口对象

/// 2.创建工作者线程(这里工作者线程的数量是按照CPU的个数来决定的,这样可以达到最佳性能)

/// 3.创建监听套接字,绑定,监听,然后程序进入循环

/// 4.在循环中,我做了以下几件事情:

/// (1).接受一个客户端连接

/// (2).将该客户端套接字与完成端口绑定到一起(还是调用CreateIoCompletionPort,但这次的

///    作用不同),注意,按道理来讲,此时传递给CreateIoCompletionPort的第三个参数应该是

///   一个完成键,一般来讲,程序都是传递一个单句柄数据结构的地址,该单句柄数据包含了和

///   该客户端连接有关的信息,由于我们只关心套接字句柄,所以直接将套接字句柄作为完成键传递;

/// (3).触发一个WSARecv异步调用,这次又用到了“尾随数据”,使接收数据所用的缓冲区紧跟

///    在WSAOVERLAPPED对象之后,此外,还有操作类型等重要信息。

/// 在工作者线程的循环中,我们

///   1.调用GetQueuedCompletionStatus取得本次I/O的相关信息(例如套接字句柄、传送的字节数、单I/O数据结构的地址等等)

///   2.通过单I/O数据结构找到接收数据缓冲区,然后将数据原封不动的发送到客户端

///   3.再次触发一个WSARecv异步操作

//

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值