首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

支持重叠I/O的定时器(对于IOCP)?

在Windows系统中,IOCP(I/O完成端口)是一种高效处理并发I/O操作的机制,它可以处理大量并发的I/O请求,包括文件I/O,套接字I/O,管道I/O等。IOCP是基于事件驱动的,当一个I/O操作完成时,它会将一个完成包(包含了I/O操作的结果和相关信息)放入完成端口,然后唤醒等待在该完成端口上的线程。

对于定时器,Windows提供了一种叫做 "Waitable Timer" 的机制,它可以用来设置一个定时器,当定时器到期时,它会变成有信号状态,从而可以唤醒等待在该定时器上的线程。

然而,Waitable Timer 并不直接支持重叠I/O或IOCP。如果你想在IOCP模型中使用定时器,你需要自己实现这个功能。一种常见的方法是创建一个专门的线程来等待定时器的信号,当定时器到期时,这个线程会被唤醒,然后它可以通过PostQueuedCompletionStatus函数将一个特殊的完成包(包含了定时器的信息)放入IOCP,从而唤醒处理IOCP的线程。

这样,你就可以在IOCP模型中使用定时器了。当然,这需要你对Windows的多线程编程和IOCP有一定的了解,并且能够正确地处理各种并发和同步问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Node理论笔记:异步IO

2.1 异步I/O与非阻塞I/O 从计算机内核I/O而言,异步/同步和阻塞/非阻塞实际上是两回事。 操作系统对于I/O只有两种:阻塞和非阻塞。 调用阻塞I/O时,应用程序需要等待I/O完成才返回。...node提供libuv作为封装抽象层,对于*nix采用自定义线程池方式,对于windows采用IOCP方式解决这些问题。...三、node异步I/O 上边是系统对异步I/O支持。 3.1 事件循环 node自身执行模式——事件循环,正是它使得回调函数十分普遍。...windows下这个循环基于IOCP,在*nix下则是基于多线程创建。 3.3 请求对象 对于一般非异步回调函数,函数由我们自行执行。...对于node中异步I/O调用而言,回调函数则不是由开发者来调用。我们发出调用到回调函数执行,这期间发生了什么呢?

74520
  • Netty和Tomcat区别、性能对比

    非阻塞IO)开发网络通信框架,对比于BIO(Blocking I/O,阻塞IO),他并发性能得到了很大提高。...NIO 2.0里终于有AIO了,Linux上用AIO,Windows上用IOCP,都支持了概念上最后一种IOasynchronous I/O 就IO而言:概念上有5中模型:blocking I/O,nonblocking...I/OI/O multiplexing (select and poll),signal driven I/O (SIGIO),asynchronous I/O (the POSIX aio_functions...而windows: 2000时候就诞生了IOCP支持最后一种异步I/O  java是一种跨平台语言,为了支持异步IO,诞生了nio,Java1.4引入NIO 1.0是基于I/O复用。...Linux用epoll,BSD上用kqueue,Windows上应该是重叠I/O(肯定不是IOCP) 但是nio直接使用比较难用,所以有了mina,netty这些针对网络io部分(tcp/udp-传输层

    6.8K50

    高性能服务端漫谈

    如果业务逻辑上,要求依赖性调用,比如DAG,那么同步也是必须。 三、IOCP和epoll 1. IOCP(完成端口) windows提供了高效异步I/O线程模型,完成端口: ?...完成端口可以关联很多文件句柄(这里文件是广义,文件、socket或者命名管道都可以是)到一个完成端口上,称为关联完成端口引用,,这些引用都必须支持(Overlapped I/O重叠I/O)。...重叠I/O是异步I/O基石,通过进行重叠I/O,可以让调用I/O操作线程与I/O操作线程并行执行而无须阻塞。 ? 多线程虽然可以充分发挥多处理器并行优势,但却不是银弹。...当一个活动线程进行I/O时,会阻塞,活动线程数量v就会下降. 这一点是IOCP精髓。...水平触发流程简单稳定,需要考虑事情少,且支持阻塞/非阻塞socket I/O。 而边沿触发,在大并发情况下,更加高效,因为通知只发一次,但只支持非阻塞socket I/O

    68180

    WinSock Socket 池

    回答这个问题关键在于散播和聚集这种I/O处理机制 散播和聚集I/O是一种起源于高级硬盘I/O技术,它本质是将一组比较分散小碎块数据组合成一个大块IO数据操作,或者反过来是将一个大块I/O操作拆分为几个小块...I/O操作。...同时对于使用了IOCP+重叠I/O通讯应用来说,在复杂多线程环境下散播和聚集I/O方法依然可以很可靠工作。...而针对像UDP这样无连接协议,我们认为它主要负责传输数据,所以这里把它归结为传输密集型 对于面向连接服务(主要指使用TCP协议服务)来说,主要设计考虑是如下几个环节: 接受连接 数据传输 IOCP...IOCP+重叠I/O+SOCKET池方式来实现具体服务应用。

    1.2K10

    高性能服务端漫谈

    完成端口可以关联很多文件句柄(这里文件是广义,文件、socket或者命名管道都可以是)到一个完成端口上,称为关联完成端口引用,,这些引用都必须支持(Overlapped I/O重叠I/O)。...重叠I/O是异步I/O基石,通过进行重叠I/O,可以让调用I/O操作线程与I/O操作线程并行执行而无须阻塞。 ? 多线程虽然可以充分发挥多处理器并行优势,但却不是银弹。...完成端口设计目标是: 1.任一给定时刻,对于任一处理器,都有一个活动线程可用。 2.控制活动线程数量,尽量减少线程上下文切换。 可以看出,IOCP主要是针对线程模型优化。...当一个活动线程进行I/O时,会阻塞,活动线程数量v就会下降. 这一点是IOCP精髓。...水平触发流程简单稳定,需要考虑事情少,且支持阻塞/非阻塞socket I/O。 而边沿触发,在大并发情况下,更加高效,因为通知只发一次,但只支持非阻塞socket I/O

    62430

    IOCP反射服务器

    当仔细研究一下之后,觉得也就 也像我很纠结公事 此际回头看 原来并没有事 真想不到当初我们也讨厌吃苦瓜 今天竟吃得出那睿智愈来愈记挂 私以为,掌握IOCP关键应该是异步概念和回调。...#define DEFAULTPORT 6000 #define DEFAULTSIZE 1024 /** * 结构体名称:PER_IO_DATA * 结构体功能:重叠I/O需要用到结构体..., // 完成键,包含了指定I/O完成包指定文件 * __in DWORD NumberOfConcurrentThreads // 真正并发同时执行最大线程数,一般推介是CPU...O使用重叠I/O机制 // 在新建套接字上投递一个或多个异步 // WSARecv或WSASend请求,这些I/O请求完成后,工作者线程会为I/O请求提供服务 // 单I/O操作数据...(I/O重叠) LPPER_IO_DATA PerIoData = (LPPER_IO_DATA)malloc(sizeof(PER_IO_DATA)); memset(PerIoData,

    84980

    17.2 实现无管道正向CMD

    WSASocket 函数用于创建重叠IO套接字,重叠 I/O(Overlapped I/O)是一种异步 I/O(Asynchronous I/O)机制,它可以在执行 I/O操作时同时进行其他操作或处理...与之相反,重叠 I/O 操作则不需要等待I/O 操作完成,线程可以在 I/O 操作进行同时执行其他任务,当 I/O 操作完成后,系统会通过事件通知机制通知线程进行相应处理。...这种机制可以提高系统并发性和响应速度,使系统更加高效和灵活。重叠 I/O 通常使用异步 I/O 完成端口(IOCP)机制实现。...IOCP 是一种基于事件驱动 I/O 模型,它提供了一种高效异步 I/O 操作方式,不仅可以提高系统并发性和响应速度,还可以减少系统资源占用,从而达到提高系统性能效果。...启用重叠 I/O 操作模式后,应用程序就可以使用异步 I/O 操作进行数据读取、发送、接收等操作,同时进行其他计算和处理操作。要使用重叠 I/O 操作机制,应用程序需要更改套接字 I/O 模式。

    19220

    17.2 实现无管道正向CMD

    WSASocket 函数用于创建重叠IO套接字,重叠 I/O(Overlapped I/O)是一种异步 I/O(Asynchronous I/O)机制,它可以在执行 I/O操作时同时进行其他操作或处理...与之相反,重叠 I/O 操作则不需要等待I/O 操作完成,线程可以在 I/O 操作进行同时执行其他任务,当 I/O 操作完成后,系统会通过事件通知机制通知线程进行相应处理。...这种机制可以提高系统并发性和响应速度,使系统更加高效和灵活。 重叠 I/O 通常使用异步 I/O 完成端口(IOCP)机制实现。...IOCP 是一种基于事件驱动 I/O 模型,它提供了一种高效异步 I/O 操作方式,不仅可以提高系统并发性和响应速度,还可以减少系统资源占用,从而达到提高系统性能效果。...要使用重叠 I/O 操作机制,应用程序需要更改套接字 I/O 模式。在传统 I/O 操作模式中,应用程序通过同步方式向套接字发送或接收数据,然后等待操作完成。

    21020

    如何产生ioexception_结合实例论述控制过程

    在普通IOCP基础上注意两点: 1.记得把监听socket绑定到端口 2.在Accept处理过程中,抛出接受连接AcceptEx请求,绑定客户端socket到端口和抛出recv请求 客户端要断开连接时...2 /** * 结构体名称:PER_IO_DATA * 结构体功能:重叠I/O需要用到结构体,临时记录IO数据 **/ const int DataBuffSize = 2 * 1024; typedef...\n"; system("pause"); return -1; } // 创建IOCP内核对象 /** * 需要用到函数原型: * HANDLE WINAPI CreateIoCompletionPort...IOCP句柄 * __in ULONG_PTR CompletionKey, // 完成键,包含了指定I/O完成包指定文件 * __in DWORD NumberOfConcurrentThreads...O使用重叠I/O机制 // 在新建套接字上投递一个或多个异步 // WSARecv或WSASend请求,这些I/O请求完成后,工作者线程会为I/O请求提供服务 // 单I/O操作数据(I/O重叠)

    38720

    c++ 网络编程(九)TCPIP LINUXwindows--使用IOCP模型 多线程超详细教程 以及 多线程实现服务端

    上面描述依然是I/O模型并非IOCP,那么IOCP是什么呢,全称 IO完成端口。...使用IOCP基本步骤很简单: 1:创建IOCP对象,由它负责管理多个Socket和I/O请求。CreateIoCompletionPort需要将IOCP对象和IOCP句柄绑定。...2:创建一个工作线程池,以便Socket发送I/O请求给IOCP对象后,由这些工作线程进行I/O操作。注意,创建这些线程时候,将这些线程绑定到IOCP上。 3:创建一个监听socket。...5:因为是异步,我们可以去做其他,等待IOCPI/O操作完成会回馈我们一个消息,我们再进行处理。 其中需要知道是:I/O请求被放在一个I/O请求队列里面,对,是队列,LIFO机制。...当一个设备处理完I/O请求后,将会将这个完成后I/O请求丢回IOCPI/O完成队列。

    3K20

    关于windows完成端口(IOCP一些理解(五)

    系列目录 关于windows完成端口(IOCP一些理解(一) 关于windows完成端口(IOCP一些理解(二) 关于windows完成端口(IOCP一些理解(三) 关于windows完成端口...(IOCP一些理解(四) 关于windows完成端口(IOCP一些理解(五) 关于windows完成端口(IOCP一些理解(六) #include "StdAfx.h" #include...信息 m_pListenContext = new PER_SOCKET_CONTEXT; // 需要使用重叠IO,必须得使用WSASocket来建立Socket,才可以支持重叠...O请求 for( int i=0;i<MAX_POST_ACCEPT;i++ ) { // 新建一个IO_CONTEXT PER_IO_CONTEXT...windows完成端口(IOCP一些理解(四) 关于windows完成端口(IOCP一些理解(五) 关于windows完成端口(IOCP一些理解(六)

    1.8K120

    《深入浅出Node.js》-异步IO

    请求对象 对于 Node 中异步 I/O 而言,回调函数究竟是谁在调用呢?比如下述代码,当文件打开成功后,后面的回调执行过程是怎样呢?...Windows 主要通过 IOCP 来向系统内核发送 I/O 调用和从系统内核获取 I/O 状态,配以事件循环,完成异步 I/O 过程,Linux 下通过 epoll 实现这个过程。...不同是,线程池在 Windows 上由内核 IOCP 实现,Linux 下由 libuv 实现。 最后回答上面提到问题,回调函数究竟由谁来执行?答案是:I/O 观察者。...定时器 (1) setTimeout 和 setInterval 实现原理与异步 I/O 比较类似,只是不需要线程池参与。...定时器中采用红黑树操作时间复杂度为 O(lg(n)),nextTick() 时时复杂度为 O(1)。相比之下, process.nextTick() 更高效。

    73030

    很幽默讲解六种Socket IO模型

    很幽默讲解六种Socket I/O模型 信息来源:幻影论坛     作  者: flyinwuhan (制怒·三思而后行) 本文简单介绍了当前Windows支持各种Socket I/O模型,如果你发现其中存在什么错误请务必赐教...一:select模型 二:WSAAsyncSelect模型 三:WSAEventSelect模型 四:Overlapped I/O 事件通知模型 五:Overlapped I/O 完成例程模型 六:IOCP...Overlapped I/O 事件通知模型和WSAEventSelect模型在实现上非常相似,主要区别在"Overlapped",Overlapped模型是让应用程序使用重叠数据结构(WSAOVERLAPPED...),一次投递一个或多个Winsock I/O请求。...-----摘自nonocast《理解I/O Completion Port》 先看一下IOCP模型实现: //创建一个完成端口 FCompletPort := CreateIoCompletionPort

    82510

    Java新一代网络编程模型AIO原理及Linux系统AIO介绍

    jdk1.7中提供对aio支持后,带来了两方面的好处: Windows上可以使用iocp了。 简化了网络变成模型。异步io相比较非阻塞多路复用模型更易理解,开发更为简单。...基本 Linux I/O 模型简单矩阵: 每个 I/O 模型都有自己使用模式,它们对于特定应用程序都有自己优点。...同步阻塞 I/O: 如下图所示:传统阻塞 I/O 模型,这也是目前应用程序中最为常用一种模型。其行为非常容易理解,其用法对于典型应用程序来说都非常有效。...在一个进程中为了执行多个 I/O 请求而对计算操作和 I/O 处理进行重叠处理能力利用了处理速度与 I/O 速度之间差异。...同步非阻塞模型允许处理和 I/O 操作重叠进行,但是这需要应用程序根据重现规则来检查 I/O 操作状态。

    1.8K80

    一个工业级、跨平台、轻量级 tcp 网络服务框架:gevent

    或 epoll 对象,便于之后加入 socket 句柄进行处理;在 unix like 平台上支持信号方式触发定时器 (timer_sig),时间间隔到达后,通过发送信号来通知调用者。...实现定时器超时;linux 则是通过 timer_create 实现,都是系统现成东西,在系统定时器到期后,再给对应 iocp 或 epoll 对象发送一个通知,在 linux 上这个通知机制是上面提到过...pipe 来实现,因而有一定延迟,不能指定精度太小定时器; cancel_timer,取消之前设置定时器。...),对于已知端口,可以通过在防火墙上设置白名单来避免,但是对于这种随机 listen 端口,真的是太难了,基本无解。...,但是你可以选择其它实现,如基于 WaitForMultipleEvents ACE_WFMO_Reactor,或基于 iocp ACE_Proactor 就没有这个自连接,不过前者最大只支持

    1.2K40

    关于windows完成端口(IOCP一些理解(一)

    系列目录 关于windows完成端口(IOCP一些理解(一) 关于windows完成端口(IOCP一些理解(二) 关于windows完成端口(IOCP一些理解(三) 关于windows完成端口...(IOCP一些理解(四) 关于windows完成端口(IOCP一些理解(五) 关于windows完成端口(IOCP一些理解(六) 本人很多年前接触完成端口以来,期间学习和练习了很多次,本以为自己真正地理解了其原理...O请求 for( int i=0;i<MAX_POST_ACCEPT;i++ ) { // 新建一个IO_CONTEXT PER_IO_CONTEXT* pAcceptIoContext...; // 每一个重叠网络操作重叠结构(针对每一个Socket每一个操作,都要有一个) SOCKET...)一些理解(一) 关于windows完成端口(IOCP一些理解(二) 关于windows完成端口(IOCP一些理解(三) 关于windows完成端口(IOCP一些理解(四) 关于windows

    7.2K90
    领券