IOCP 系列函数讲解

IOCP---完成端口(CompletionPort) 假若—个应用程序同时需要管理为数众多的套接字,那么“完成端口”模型。往往可以达到最佳的系统性能,然而不幸的是,该模型只适用于以下操作系统(微软的):Windows NT和Windows 2000操作系统。因其设计的复杂性,只有在应用程序需要同时管理数百乃至上千个套接字的时候、而且希望随着系统内安装的CPU数量的增多、应用程序的性能也可以线性提升,才应考虑采用“完成端口”模型。要记住的一个基本准则是... 阅读详情

CreateIoCompletionPort()详解

函数原型:

HANDLE WINAPI CreateIoCompletionPort(
  __in          HANDLE FileHandle,
  __in          HANDLE ExistingCompletionPort,
  __in          ULONG_PTR CompletionKey,
  __in          DWORD NumberOfConcurrentThreads
);

  一个I/O完成端口关联一个或多个文件句柄,也可以在创建I/O完成端口的时候 没有关联任何文件句柄。一个I/O完成端口关联一个打开文件的实例使应用程序可以收到包括这个文件异步I/O操作的完成通知。

参数:
FileHandle 打开重叠IO完成端口的文件句柄
如果设置这个参数为INVALID_HANDLE_VALUE,那 么,CreateIoCompletionPort 会创建一个不关联任何文件的完成端口,而且ExistingCompletionPort 必须设置为NULL,CompletionKey 也将被忽略。

ExistingCompletionPort 完成端口句柄
如果指定一个已经存在的完成端口,函数将关联 FileHandle 指定的文件,并返回已存在的完成端口句柄,函数不会创建一个新的完成端口。
如果这个参数为NULL,函数创建一个与FileHandle指定的文 件关联的完成端口,并返回一个新的完成端口句柄。

CompletionKey 单文件句柄,包含指定文件每次IO完成包数据信息。

NumberOfConcurrentThreads 系统允许在完成端口上并发处理IO完成包的最大线程数量。如果 ExistingCompletionPort 为NULL,此参数忽略

返回值:
如果执行成功,函数返回关联指定文件的完成端口句柄;否则,返回NULL

备注:
  CreateIoCompletionPort 提供这个功能:I/O系统可以被用来向列队的I/O完成端口发送I/O完成通知包。当 你执行一个已经关联一个完成端口的文件I/O操作,I/O系统将会在这个I/O操作完成的时候向I/O完成端口发送一个完成通知包,I/O完成端口将以先 进先出的方式放置这个I/O完成通知包,并使用GetQueuedCompletionStatus 接收I/O完成通知包。
  虽然允许任何数量的 线程来调用 GetQueuedCompletionStatus 等待一个I/O完成端口,但每个线程只能同时间内关联一个I/O完成端口,且此端口是线程最后检查的那个端口。
  当一个包被放入队列中,系统首先会 检查有多少个关联此端口的线程在运行,如果运行的线程的数量少于NumberOfConcurrentThreads的值,那么允许其中的一个等 待线程去处理包。当一个运行的线程完成处理,将再次调用GetQueuedCompletionStatus ,此时系统允许另一个等待线程去处理包。
  系 统也允许一个等待的线程处理包如果运行的线程进入任何形式的等待状态,当这个线程从等待状态进入运行状态,可能会有一个很短的时期活动线程的数量会超过 NumberOfConcurrentThreads 的值,此时,系统会通过不允许任何新的活动线程快速的减少线程个数,直到活动线程少于NumberOfConcurrentThreads 的值。
参考链接:
CreateIoCompletionPort和完成端口

GetQueuedCompletionStatus

  完成端口GetQueuedCompletionStatus返回值的问题

  先看看GetQueuedCompletionStatus函数的完整声明:

BOOL GetQueuedCompletionStatus(
    HANDLE CompletionPort,       
    LPDWORD lpNumberOfBytes,    
    PULONG_PTR lpCompletionKey, 
    LPOVERLAPPED *lpOverlapped, 
    DWORD dwMilliseconds
);

  再看看MSDN上对其返回值的说明:

  If the function dequeues a completion packet for a successful I/O operation from the completion port, the return value is nonzero. The function stores information in the variables pointed to by the lpNumberOfBytesTransferred, lpCompletionKey, and lpOverlapped parameters.
  如果函数从完成端口取出一个成功I/O操作的完成包,返回值为非0。函数在lpNumberOfBytes, lpCompletionKey, and lpOverlapped指向的参数中存储相关信息。

  If *lpOverlapped is NULL and the function does not dequeue a completion packet from the completion port, the return value is zero. The function does not store information in the variables pointed to by the lpNumberOfBytesTransferred and lpCompletionKey parameters. To get extended error information, call GetLastError. If the function did not dequeue a completion packet because the wait timed out, GetLastError returns WAIT_TIMEOUT.
  如果 *lpOverlapped为NULL并且函数没有从完成端口取出完成包,返回值则为0。函数则不会在lpNumberOfBytes and lpCompletionKey所指向的参数中存储信息。调用GetLastError可以得到一个扩展错误信息。如果函数由于等待超时而未能出列完成包,GetLastError返回WAIT_TIMEOUT.

  If *lpOverlapped is not NULL and the function dequeues a completion packet for a failed I/O operation from the completion port, the return value is zero. The function stores information in the variables pointed to by lpNumberOfBytesTransferred, lpCompletionKey, and lpOverlapped. To get extended error information, call GetLastError
  如果 *lpOverlapped不为空并且函数从完成端口出列一个失败I/O操作的完成包,返回值为0。函数在指向lpNumberOfBytesTransferred, lpCompletionKey, and lpOverlapped的参数指针中存储相关信息。调用GetLastError可以得到扩展错误信息。

  If a socket handle associated with a completion port is closed, GetQueuedCompletionStatus returns ERROR_SUCCESS, with lpNumberOfBytes equal zero.
  如果关联到一个完成端口的一个socket句柄被关闭了,则GetQueuedCompletionStatus返回ERROR_SUCCESS,并且lpNumberOfBytes等于0

参考链接
GetQueuedCompletionStatus的返回值

PostQueuedCompletionStatus

函数原型:

BOOL WINAPI PostQueuedCompletionStatus(
  _In_     HANDLE       CompletionPort,
  _In_     DWORD        dwNumberOfBytesTransferred,
  _In_     ULONG_PTR    dwCompletionKey,
  _In_opt_ LPOVERLAPPED lpOverlapped
);

CompletionPort:指定想向其发送一个完成数据包的完成端口对象。
dwNumberOfBytesTrlansferred:指定—个值,直接传递给GetQueuedCompletionStatus函数中对应的参数
dwCompletlonKey:指定—个值,直接传递给GetQueuedCompletionStatus函数中对应的参数
lpoverlapped:指定—个值,直接传递给GetQueuedCompletionStatus函数中对应的参数

  可以看到上面后三个参数都可以传递给GetQueuedCompletionStatus,这样—来。—个工作者线程收到传递过来的三个GetQueuedCompletionStatus函数参数后,便可根据由这三个参数的某一个设置的特殊值,决定何时应该退出。例如,可用dwCompletionPort参数传递0值,而—个工作者线程会将其解释成中止指令。一旦所有工作者线程都已关闭,便可使用CloseHandle函数,关闭完成端口。最终安全退出程序。
  PostQueuedCompletionStatus函数提供了一种方式来与线程池中的所有线程进行通信。如,当用户终止服务应用程序时,我们想要所有线程都完全利索地退出。但是如果各线程还在等待完成端口而又没有已完成的I/O 请求,那么它们将无法被唤醒。
  通过为线程池中的每个线程都调用一次PostQueuedCompletionStatus,我们可以将它们都唤醒。每个线程会对GetQueuedCompletionStatus的返回值进行检查,如果发现应用程序正在终止,那么它们就可以进行清理工作并正常地退出。
  这个函数成功返回0,失败返回非0,但是如果当此函数返回 false,并且当 GetLastError() == ERROR_IO_PENDING 的时候,认为它是成功的。

参考
MSDN
Can PostQueuedCompletionStatus ever fail?

WSASocket

  函数原型

SOCKET WSASocket(
  _In_ int                af,
  _In_ int                type,
  _In_ int                protocol,
  _In_ LPWSAPROTOCOL_INFO lpProtocolInfo,
  _In_ GROUP              g,
  _In_ DWORD              dwFlags
);

  参数说明:
af:[in]: 一个地址族规范。目前仅支持AF_INET格式,亦即ARPA Internet地址格式。
type:新套接口的类型描述。
protocol:套接口使用的特定协议,如果调用者不愿指定协议则定为0。
lpProtocolInfo:一个指向PROTOCOL_INFO结构的指针,该结构定义所创建套接口的特性。如果本参数非零,则前三个参数(af, type, protocol)被忽略。
g:保留给未来使用的套接字组。套接口组的标识符。
iFlags:套接口属性描述。

Socket与WSASocket的区别

  socket和UNIX兼容,等价于用默认选项调用WSASocket。
  WSASocket可以使用WinSock特有功能,比如重叠IO,用dwflags指定。

  wsa的a是指api,用于区别spi,因为在spi中还有wspsocket,wspaccept等…再说一下winsock分两部分:winsock api,winsock spi。。。

  WSASocket()在Socket()上扩展了一些功能,可以让你详细的来“定制”,一个socket如果只是简单的使用就没有必要使用WSASocket()

WSASocket用于非阻塞,很好用,Socket用于阻塞,也可采用多线程实现非阻塞

函数返回的错误代码:

WSANOTINITIALISED                在调用本API之前应成功调用WSAStartup()。
WSAENETDOWN                 网络子系统失效。
WSAEAFNOSUPPORT                不支持指定的地址族。
WSAEINPROGRESS                一个阻塞的WinSock调用正在进行中,或者服务提供者仍在处理一个回调函数
WSAEMFILE                                无可用的套接口描述字。
WSAENOBUFS                        无可用的缓冲区空间。套接口无法创建。
WSAEPROTONOSUPPORT        不支持指定的协议。
WSAEPROTOTYPE                指定的协议对于本套接口类型错误。
WSAESOCKTNOSUPPORT        本地址族不支持指定的套接口类型。
WSAEINVAL                                g参数非法。

其实这个函数每个参数都有很复杂的讲解。
具体可以参见MSDN文档。

WSAEventSelect

  WSAEventSelect模型是WindowsSockets提供的一个有用异步I/O模型。该模型允许在一个或者多个套接字上接收以事件为基础的网络事件通知。Windows Sockets应用程序在创建套接字后,调用WSAEventSelect()函数,将一个事件对象与网络事件集合关联在一起。当网络事件发生时,应用程序以事件的形式接收网络事件通知。
  使用这个模型的基本思路是为感兴趣的一组网络事件创建一个事件对象,再调用WSAEventSelect()函数将网络事件和事件对象关联起来。当网络事件发生时,Winsock使相应的事件对象受信,在事件对象上的等待函数就会返回。
  Winsock中创建事件对象的函数是WSACreateEvent,定义如下:

WSAEVENT WSACreateEvent(void); //返回一个手工重置的事件对象句柄

  创建事件对象之后,必须调用WSAEventSelect函数将指定的一组网络事件与它关联在一起。

  WSAEventSelect模型简单易用,也不需要窗口环境。该模型唯一的缺点是有最多等待64个事件对象的限制,当套接字连接数量增加时,就必须创建多个线程来处理I/O,也就是所谓的线程池。
  与WSAAsyncSelect一样也是一种异步事件通知模型,不同的是WSAAsyncSelect是与窗口句柄关联在一起的,必须要要窗口才行,而WSAEventSelect是与事件对象关联的。这个模型的基本思路是为感兴趣的一组网络事件创建一个事件对象,再调用WSAEventSelect函数将网络事件和事件对象关联起来。当网络事件发生时,winsock使响应的事件对象受信,在事件对象上等待的函数就会立即返回。之后调用WSAEnumNetworkEvents函数便可获得到底发生了什么网络事件(FD_READ/FD_ACCEPT/FD_CLOSE等等)。

WSARecv

函数原型:

int WSARecv(
  _In_    SOCKET                             s,
  _Inout_ LPWSABUF                           lpBuffers,
  _In_    DWORD                              dwBufferCount,
  _Out_   LPDWORD                            lpNumberOfBytesRecvd,
  _Inout_ LPDWORD                            lpFlags,
  _In_    LPWSAOVERLAPPED                    lpOverlapped,
  _In_    LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);

  将一个套结字邦定到完成端口后,调用WSARecv和WSASend会立即返回,提高了系统的效率。可以以完成端口为参数调用 GetQueuedCompletionStatus 通过返回参数 lpOverlapped结构来区分来WSARecv和WSASend 。这样主程序就可以完全等待接受新的连接,线程程序来等待WSARecv和WSASend是否完成了。

IO模型之完成端口completion port(windows上性能最好) 文章目录1. 完成端口IOCP模型2. 完成端口IOCP模型的原理3. 使用完成端口的基本流程4. CreateloCompletionPort函数5. GetQueuedCompletionStatus函数WSAOVERLAPPED结构6. WSARecv函数7. 服务端编程8. 客户端编程 1. 完成端口IOCP模型 一个完成端口实际上就是一个通知队列,操作系统把已经完成的重叠I/0请求的通知放到队列中。完成端口会充分利用Windows最复杂的内核对象来进行I/O的调度,属于异步IO,是用于C/S通信模 阅读详情

相关推荐

IOCP服务器设计(via Modern C++)

C++11标准提出来有些年头了,十一放假没事研究了一下IOCP,想着能不能用C++11实现一个高性能的服务器。当然,目前有许多十分成熟的C++网络库,比如ACE和asio等等。但是如果想深入了解其本质,在Windows平台下就必须了解Socket结合IOCP的使用原理。本文尽可能把笔者在使用C++11实现IOCP服务器的过程中遇到的困难和问题展现给大家,让大家学习起来少走些弯路。

Bluewingtan的博客 2095

Winsock 完成端口模型简介

摘自《Networking Programming for Microsoft Windows》第八章“完成端口”模型是迄今为止最为复杂的一种I/O模型。然而,假若一个应用程序同时需要管理为数众多的套接字,那么采用这种模型,往往可以达到最佳的系统性能!从本质上说,完成端口模型要求我们创建一个Win32完成端口对象,通过指定数量的线程,对重叠I/O请求进行管理,以便为已经完成的重叠I/O请求提供服务

深之JohnChen的专栏 2849

IOCP完整C++编程示例包

本文还有配套的精品资源,点击获取 简介:IOCP(输入/输出完成端口)是Windows系统中一种高效的高并发I/O操作机制,特别适用于网络服务器和大量并发读写操作的应用程序。本压缩包提供了一个关于IOCP的C++编程示例,旨在展示如何实现IOCP以构建能够处理大量并发连接的服务器,而无需为每个连接创建单独的线程,避免了线程创建和销毁的开销及上下文切换问题。通过这个示例,开发...

weixin_35995661的博客 1031

CreateIoCompletionPort

创建输入/输出(I / O)完成端口并将其与指定的文件句柄相关联,或创建尚未与文件句柄相关联的I / O完成端口,从而允许以后进行关联。 将打开的文件句柄的实例与I / O完成端口相关联,可使进程接收有关该文件句柄的异步I / O操作完成的通知。 注意 此处使用的术语文件句柄是指表示重叠的I / O端点的系统抽象,而不仅仅是磁盘上的文件。任何支持重叠I / O的系统对象(例如网络端点,TC...

xinqingwuji的博客 1588

深入掌握Windows IOCP高性能编程

本文还有配套的精品资源,点击获取 简介:完成端口(IOCP)是Windows中的高效I/O模型,用于高效处理并发I/O操作。本压缩包包含的源码和示例文件旨在帮助开发者深入理解并实践完成端口的使用,涵盖线程池使用、异步I/O操作、完成队列管理、I/O状态获取和自定义完成信息处理。通过这些实践,开发者能够掌握如何提升网络服务器性能,实现高效多路复用,并增强应用程序处理并发连接的...

weixin_35370061的博客 1234

如何使用AutoDl平台跑自己的模型(纯干货,步骤很详细)

记录我使用AutoDL云服务器来跑自己模型的全过程

qq_45073592的博客 3万+

完成端口(CompletionPort)详解

     手把手叫你玩转网络编程系列之三    完成端口(Completion Port)详解                      &...

欧特GO 1083

SigmaStudio进阶技巧:如何用ADAU1701实现60段EQ与防啸叫算法

本文深入探讨了如何在ADAU1701 DSP芯片上实现专业级音频处理系统。通过精密的资源规划与架构设计,详细讲解了构建高达60段参数均衡器(EQ)的有效方法,并集成了移频与自适应陷波双策略的智能防啸叫算法。内容涵盖从SigmaStudio工程优化、算法模块组合到系统联调实战的全流程,旨在帮助中高级开发者充分利用ADAU1701性能,打造稳定、高效的音频处理解决方案。

weixin_28256233的博客 384

IOCP简介

1.1 环境要求本文读者需要熟悉C++、TCP/IP、Socket编程、MFC,和多线程。源码使用Winsock 2.0和IOCP技术,要求:Windows NT/2000或以上:要求Windows NT3.5或以后版本Windows 95/98/ME:不支持Visual C++.NET,或完整更新过的Visual C++ 6.01.2 摘要当 你开发不同类型的软件,你迟早必须处理C/S的开发。对...

weixin_33979363的博客 4188

使用ONNX Runtime在Java Web应用中部署深度学习模型

当应用场景需要集成深度学习模型进行推理时,直接在Java Web应用中集成深度学习框架可能会面临性能、兼容性等问题。为了将深度学习模型无缝集成到Java Web应用中,是一项广受认可且实用的方法。本篇文档将介绍如何将模型转换为ONNX格式,并通过ONNX Runtime Server进行部署,并通过Java Web应用调用以进行回归或预测任务。本方案的主要目标是实现以下功能:将PyTorch模型转换为ONNX格式。部署ONNX Runtime Server,加载ONNX模型并提供推理服务。

shysea2019的博客 8857

gnuradio+b210实现FM收音机

gnuradio+b210实现FM收音机环境介绍FM接收1 Flow Graph2 变量参数FM发射1 Flow Graph 环境介绍 Name Version gnuradio 3.7.14.0 uhd 3.15.0.0 ubuntu 18.04 usrp b210 参考 https://www.ijedr.org/papers/IJEDR1702038.pdf Audio File Transmission using GNURADIO and USRP FM接

u011745228的博客 5125

IOCP完成端口通俗讲义与项目实战

可以把IOCP完成端口理解为Windows下性能最高的网络编程技术,本文讲解该技术的基本知识,以及如何使用该技术开发高性能的网络软件。 IOCP完成端口本质上就是Windows提供的一种请求队列+通知队列,我们把各种耗时的网络操作请求投递到请求队列,系统具体怎么去完成这些网络操作我们不管,系统完成后会把结果放到通知队列里,我们就去通知队列里获取结果然后处理。............................................................................

jaye8090的博客 2936

基于大语言模型的多轮对话系统优化研究

基于大语言模型的多轮对话系统优化研究 摘要 本研究针对大语言模型在多轮对话场景中的性能衰减问题,提出了一套系统优化方案。通过分层存储架构(短期记忆层、中期摘要层、长期知识层)和混合检索策略优化上下文管理,设计动态槽位填充框架增强对话状态跟踪,引入熵引导的重置算法改进生成策略,并采用双路径加载架构突破I/O瓶颈。实验表明,该方案使任务完成率提升28.6%,响应一致性提高41.2%,推理延迟降低35.8%,为构建高性能智能对话系统提供了实用技术路径。 关键词:大语言模型;多轮对话;上下文管理;状态跟踪~~~~~

huanghm88的专栏 663

IOCP实现步骤

IOCP 实现步骤       如果懂得了 IOCP 的工作原理,它实现起来是很简单的。 它的实现步骤如下: 1.   创建好 IOCP 2.   创建 Socket ( socket 可以是由 Accept 得到) 3.   将 Socket 关联到 IOCP 4.   socket 向 IOCP 提交各种所需请求 5.   IOCP 操作完成之后将结果返回给 soc

zuiyuezhou888的专栏 2321

yolov8 转华为昇腾om脚本

yolov8 转华为昇腾om脚本

jacke121的专栏 1600

大模型——CoPaw:阿里云通义推出的个人智能体工作台,让 AI 助理真正落地

阿里云通义实验室于2026年2月发布CoPaw个人智能助理,采用"本地+云端"双部署模式,支持多平台接入和技能扩展。该产品基于AgentScope多智能体生态构建,具备极简部署、长期记忆系统和灵活的技能插件体系三大核心特性。用户可通过简单命令快速安装,并通过记忆文件系统实现个性化交互体验。CoPaw还支持钉钉、飞书等主流平台接入,并开源了模块化架构,允许本地模型接入。技术架构采用多频道对话网关与可插拔Skills系统,为用户提供真正的AI助理服务体验。

2132

网络编程——IOCP函数

CreateIoCompletionPort(     _In_ HANDLE FileHandle,     _In_opt_ HANDLE ExistingCompletionPort,     _In_ ULONG_PTR CompletionKey,     _In_ DWORD NumberOfConcurrentThreads     );         这个函数都说是端

mituyangfan的博客 486

AIGC算法工程师 面试八股文

1、简述DDPM的算法原理 2、什么是重参数化技巧?Diffusion Models和VAE中的重参数化技巧是如何使用的? VAE中的重参数化技巧 Diffusion Models中的重参数化技巧 3、什么是马尔可夫过程?DDPM中的马尔可夫链是如何定义的? 马尔可夫过程 DDPM马尔可夫链 4、为什么DDPM前向过程中前期加噪少,后期加噪多? 5、VAE和Diffusion Models中的变分推断是什么? 6、Negative Prompt实现的原理是什么?

沉迷单车的追风少年 1万+

一个IOCP 例子

IOCP 例子 翻译人: Kevin Chen.  原文链接:http://www.codeproject.com/KB/IP/iocp_server_client.aspx  1. 简介     2. IOCP 2.1. 异步完成端口(IOCP)简介          一个服务器程序如果不能同时服务多个客户端,则不能称之为服务程序,通常,异步I/O调用和多线程被用来实现同

chcucl的专栏 2394

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【待总结】IOCP相关

I/O完成队列(先进先出) q1 等待线程队列(后进先出)q2 已释放线程列表(活动线程)l1 已暂停线程列表(挂起线程)l2 1.当线程调用GetQueuedCompletionStatus阻塞时,该线程被放入等待线程队列q2中。 IO 完成端口内核对象根据此队列知道有哪些线程在等待处理completion packet。线程等待队列是按照 LIFO 的方式入队的,也就是当有...

beibaoke910的专栏 371

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

网络编程:IOCP与异步IO模型深度解析

IOCP(I/O Completion Port)是Windows操作系统提供的一种高效处理异步I/O请求的机制,它通过预分配的线程池和完成事件通知来提升多处理器系统上的I/O处理效率。与Linux中的Reactor模型不同,IOCP模型将I/O检测和操作都交由内核完成,用户线程只需等待完成通知。

平平无奇的小甜菜 1378

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【C++学习笔记】Windows IOCP网络编程

IOCP即IO完成端口(I/O Completion Ports),是Windows系统的高性能异步IO机制。其主要原理将Socket绑定到一个CP(每个CP可以绑定多个Socket)。每当发起一个IO操作时,操作会被抛给内核并放在一个事件队列中,异步的从队列中取出事件并执行。操作完成后,内核将结果放入完成端口的队列中。应用程序通过调用相关API从该完成队列中获取完成的I/O操作信息。

qq_28416409的博客 1534

SOCKET IOCP( 一)

SOCKET IOCP 一引言便于理解小帮手Accept 方式的IOCP代码 引言 最近又有空了,但是最近看见很多关于Java netty的东西,大家想到最多的就是NIO,事实上我这里要科普一下netty在windows下我想应该使用的是select并不是iocp,所以性能会和linux上有很大差距,我个人觉得netty的nio不是netty牛X的重点,而是它在Java中池化内存等等,但这并不妨...

Doub1's Blog 772

完成端口模型IOCP详解 (一)

<!--v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);}--> Normal 0 7.8 磅 0 2

Welcom to zougangx's blog 1万+

Windows的多路复用IOCP

摘要 IOCP(输入/输出完成端口)是Windows系统提供的一种高效异步I/O处理机制。它通过将I/O请求与预分配线程池结合,实现多处理器系统上的高性能并发处理。IOCP核心原理包括:创建完成端口并与文件句柄关联、线程通过GetQueuedCompletionStatus等待I/O完成通知、使用重叠I/O实现非阻塞操作。文中详细介绍了IOCP的工作原理、同步/异步I/O区别,并提供了完整的网络编程实现案例,包括初始化Winsock、创建监听Socket、工作线程池管理以及I/O事件处理等关键步骤。该机制特

工作学习记录 640

技术演进中的开发沉思-11window编程系列:强大的IOCP

本文以从业二十余年老程序员的视角,采用技术散文形式深入剖析 Windows 完成端口(IOCP)技术。从同步 I/O 的阻塞困境切入,阐述异步 I/O 的诞生与早期模型的局限,凸显 IOCP 在解决高并发 I/O 难题上的核心价值。详细拆解 IOCP 的核心组件与工作流程,结合曾实现 5 万人同时在线的游戏服务器开发实例,生动展现其在实际应用中的高效运作。深入探讨 IOCP 的关键机制,包括完成包队列管理、线程池优化、OVERLAPPED结构生命周期把控等,并提供完整的示例代码及调试、性能分析思路。文章将技

你的天空阅读专栏 714
上一篇: IOCP 完成端口
下一篇: gh0st的IOCP模型分析
xianjian_x
博客等级 码龄14年 231粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值