网络编程(完成端口IOCP)

Windows Sockets网络编程(5)完成端口模型(IOCP) 摘要:上篇文章《Windows Sockets网络编程(4)套接字重叠IO模型》中,讲到了重叠IO的模型,同时也提到了APC函数,重叠IO是通过注册APC函数让线程调用来实现的,细心的你会发现这里有个严重的性能问题——那就是,只存在一个服务处理线程。为了解决该问题,Windows提出了IOCP模型(也叫完成端口模型),该模型主要增加了线程池。完成端口模型是一种真正意义上的异步模型,当应用程序需要管... 阅读详情
 

Windows 完成端口编程

分类: 网络编程   755人阅读  评论(4)  收藏  举报

Windows 完成端口编程

本文为转载, 原文地址:  http://xingzhesun.blogbus.com/logs/3925649.html

1   基本概念

设备—windows操作系统上允许通信的任何东西,比如文件、目录、串行口、并行口、邮件槽、命名管道、无名管道、套接字、控制台、逻辑磁盘、物理磁盘等。绝大多数与设备打交道的函数都是CreateFile/ReadFile/WriteFile等。所以我们不能看到**File函数就只想到文件设备。

与设备通信有两种方式,同步方式和异步方式。同步方式下,当调用ReadFile函数时,函数会等待系统执行完所要求的工作,然后才返回;异步方式下,ReadFile这类函数会直接返回,系统自己去完成对设备的操作,然后以某种方式通知完成操作。

重叠I/O—顾名思义,当你调用了某个函数(比如ReadFile)就立刻返回做自己的其他动作的时候,同时系统也在对I/0设备进行你要求的操作,在这段时间内你的程序和系统的内部动作是重叠的,因此有更好的性能。所以,重叠I/O是用于异步方式下使用I/O设备的。

重叠I/O需要使用的一个非常重要的数据结构  OVERLAPPED   。

完成端口—是一种WINDOWS内核对象。完成端口用于异步方式的重叠I/0情况下,当然重叠I/O不一定非使用完成端口不可,还有设备内核对象、事件对象、告警I/0等。但是完成端口内部提供了线程池的管理,可以避免反复创建线程的开销,同时可以根据CPU的个数灵活的决定线程个数,而且可以让减少线程调度的次数从而提高性能。

2   OVERLAPPED数据结构

  1. typedef struct _OVERLAPPED  
  2. {  
  3.     ULONG_PTR Internal;         //被系统内部赋值,用来表示系统状态  
  4.     ULONG_PTR InternalHigh;     // 被系统内部赋值,传输的字节数  
  5.     union {  
  6.         struct  
  7.         {  
  8.             DWORD Offset;       //和OffsetHigh合成一个64位的整数,用来表示从文件头部的多少字节开始  
  9.             DWORD OffsetHigh;   //操作,如果不是对文件I/O来操作,则必须设定为0  
  10.         };  
  11.         PVOID     Pointer;  
  12.     };  
  13.     HANDLE        hEvent;       //如果不使用,就务必设为0,否则请赋一个有效的Event句柄  
  14. } OVERLAPPED, *LPOVERLAPPED;  

下面是异步方式使用ReadFile的一个例子

  1. OVERLAPPED Overlapped;  
  2. Overlapped.Offset=345;  
  3. Overlapped.OffsetHigh=0;  
  4. Overlapped.hEvent=0;  
  5. //假定其他参数都已经被初始化  
  6. ReadFile(hFile,buffer,sizeof(buffer),&dwNumBytesRead,&Overlapped);  

这样就完成了异步方式读文件的操作,然后ReadFile函数返回,由操作系统做自己的事情吧

下面介绍几个与  OVERLAPPED   结构相关的函数 等待重叠I/0操作完成的函数

  1. BOOL GetOverlappedResult (  
  2.     ANDLE        hFile,  
  3.     LPOVERLAPPED lpOverlapped,  //接受返回的重叠I/0结构  
  4.     LPDWORD      lpcbTransfer,  //成功传输了多少字节数  
  5.     BOOL fWait                  //TRUE只有当操作完成才返回,FALSE直接返回,如果操作没有完成,通过调  
  6.                                 //用GetLastError ( )函数会返回ERROR_IO_INCOMPLETE  
  7.     );  

宏  HasOverlappedIoCompleted   可以帮助我们测试重叠I/0操作是否完成,该宏对  OVERLAPPED 结构的 Internal 成员进行了测试,查看是否等于  STATUS_PENDING   值。

3   完成端口的内部机制

3.1   创建完成端口

完成端口是一个内核对象,使用时他总是要和至少一个有效的设备句柄进行关联,完成端口是一个复杂的内核对象,创建它的函数是:

  1. HANDLE CreateIoCompletionPort(  
  2.     IN HANDLE FileHandle,  
  3.     IN HANDLE ExistingCompletionPort,  
  4.     IN ULONG_PTR CompletionKey,  
  5.     IN DWORD NumberOfConcurrentThreads );  

通常创建工作分两步:

第一步,创建一个新的完成端口内核对象,可以使用下面的函数:

  1. HANDLE CreateNewCompletionPort(DWORD dwNumberOfThreads)  
  2. {  
  3.     return CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,NULL,dwNumberOfThreads);  
  4. };  

第二步,将刚创建的完成端口和一个有效的设备句柄关联起来,可以使用下面的函数:

  1. bool AssicoateDeviceWithCompletionPort(HANDLE hCompPort,HANDLE hDevice,DWORD dwCompKey)  
  2. {  
  3.     HANDLE h=CreateIoCompletionPort(hDevice,hCompPort,dwCompKey,0);  
  4.     return h==hCompPort;  
  5. };  

说明


CreateIoCompletionPort
函数也可以一次性的既创建完成端口对象,又关联到一个有效的设备句柄
CompletionKey
是一个可以自己定义的参数,我们可以把一个结构的地址赋给它,然后在合适的时候取出来使用,最好要保证结构里面的内存不是分配在栈上,除非你有十分的把握内存会保留到你要使用的那一刻。
NumberOfConcurrentThreads
通常用来指定要允许同时运行的的线程的最大个数。通常我们指定为0,这样系统会根据CPU的个数来自动确定。

创建和关联的动作完成后,系统会将完成端口关联的设备句柄、完成键作为一条纪录加入到这个完成端口的设备列表中。如果你有多个完成端口,就会有多个对应的设备列表。如果设备句柄被关闭,则表中自动删除该纪录。

3.2   完成端口线程的工作原理

完成端口可以帮助我们管理线程池,但是线程池中的线程需要我们使用beginthreadex来创建,凭什么通知完成端口管理我们的新线程呢?答案在函数   GetQueuedCompletionStatus   。 该函数原型:

  1. BOOL GetQueuedCompletionStatus(  
  2.     IN HANDLE CompletionPort,  
  3.     OUT LPDWORD lpNumberOfBytesTransferred,  
  4.     OUT PULONG_PTR lpCompletionKey,  
  5.     OUT LPOVERLAPPED *lpOverlapped,  
  6.     IN DWORD dwMilliseconds  
  7.     );  

这个函数试图从指定的完成端口的I/0完成队列中抽取纪录。只有当重叠I/O动作完成的时候,完成队列中才有纪录。凡是调用这个函数的线程将被放入到完成端口的等待线程队列中,因此完成端口就可以在自己的线程池中帮助我们维护这个线程。

完成端口的I/0完成队列中存放了当重叠I/0完成的结果— 一条纪录,该纪录拥有四个字段,前三项就对应 GetQueuedCompletionStatus   函数的2、3、4参数,最后一个字段是错误信息  dwError   。我们也可以通过调用  PostQueudCompletionStatus   模拟完成了一个重叠I/0操作。

当I/0完成队列中出现了纪录,完成端口将会检查等待线程队列,该队列中的线程都是通过调用GetQueuedCompletionStatus   函数使自己加入队列的。等待线程队列很简单,只是保存了这些线程的ID。完成端口会按照后进先出的原则将一个线程队列的ID放入到释放线程列表中,同时该线程将从等待 GetQueuedCompletionStatus   函数返回的睡眠状态中变为可调度状态等待CPU的调度。

基本上情况就是如此,所以我们的线程要想成为完成端口管理的线程,就必须要调用GetQueuedCompletionStatus   函数。出于性能的优化,实际上完成端口还维护了一个暂停线程列表,具体细节可以参考《Windows高级编程指南》,我们现在知道的知识,已经足够了。

3.3   线程间数据传递

线程间传递数据最常用的办法是在  _beginthreadex   函数中将参数传递给线程函数,或者使用全局变量。但是完成端口还有自己的传递数据的方法,答案就在于  CompletionKey   和  OVERLAPPED 参数。

CompletionKey   被保存在完成端口的设备表中,是和设备句柄一一对应的,我们可以将与设备句柄相关的数据保存到  CompletionKey   中,或者将  CompletionKey   表示为结构指针,这样就可以传递更加丰富的内容。这些内容只能在一开始关联完成端口和设备句柄的时候做,因此不能在以后动态改变。

OVERLAPPED   参数是在每次调用  ReadFile   这样的支持重叠I/0的函数时传递给完成端口的。我们可以看到,如果我们不是对文件设备做操作,该结构的成员变量就对我们几乎毫无作用。我们需要附加信息,可以创建自己的结构,然后将  OVERLAPPED   结构变量作为我们结构变量的第一个成员,然后传递第一个成员变量的地址给 ReadFile   函数。因为类型匹配,当然可以通过编译。当GetQueuedCompletionStatus   函数返回时,我们可以获取到第一个成员变量的地址,然后一个简单的强制转换,我们就可以把它当作完整的自定义结构的指针使用,这样就可以传递很多附加的数据了。太好了!只有一点要注意,如果跨线程传递,请注意将数据分配到堆上,并且接收端应该将数据用完后释放。我们通常需要将ReadFile这样的异步函数的所需要的缓冲区放到我们自定义的结构中,这样当*GetQueuedCompletionStatus* 被返回时,我们的自定义结构的缓冲区变量中就存放了I/0操作的数据。

CompletionKey   和  OVERLAPPED   参数,都可以通过  GetQueuedCompletionStatus   函数获得。

3.4   线程的安全退出

很多线程为了不止一次的执行异步数据处理,需要使用如下语句

  1. while (true)  
  2. {  
  3. ....  
  4.     GetQueuedCompletionStatus(...);  
  5. }  

那么如何退出呢,答案就在于上面曾提到的  PostQueudCompletionStatus   函数,我们可以用它发送一个自定义的包含了  OVERLAPPED   成员变量的结构地址,里面包含一个状态变量,当状态变量为退出标志时,线程就执行清除动作然后退出。

完成端口与AcceptEx 关于IOCP网上到处都是资料,说的也很详细。我在这里就不再多说了,这只是本人在学习IOCP时的笔记,和配合AcceptEx写的一个极小的服务端程序。由于刚刚接触ICOP加上本人刚毕业不到一年,所以里面的理解或观点可能有误,还请大家多多批评!          VC6.0开发,旨在体现IOCP的架构,忽略细节,服务程序的功能只是接收客户连接,接着接收到客户数据,然后原封不动的返回给客户!   阅读详情

相关推荐

完成端口(Completion Port)

I/O操作由操作系统内核来处理,当I/O操作完成后,内核会将完成的通知放到完成端口的队列中。2. **减少线程使用**:对于每个并发I/O操作创建一个线程的传统模型,完成端口允许使用少量的线程来处理大量的I/O操作,降低了线程上下文切换的开销。4. **获取完成通知**:应用程序通过GetQueuedCompletionStatus等函数从完成端口获取完成的I/O操作的通知,并处理这些通知。- 完成端口处理的是I/O操作的完成通知,而不是I/O操作本身的结果,因此应用程序需要处理可能出现的错误。

weixin_46687533的博客 349

Windows io完成端口

Windows 提供一种称为I/O完成端口(I/O Completion Port)机制,能够让I/O的完成处理交由一个专门的线程池来完成,而线程池的线程数量是一个可配置的参数。这种做法将I/O请求的发起动作与完成处理分离到了不同的线程中。CreateIoCompletionPort函数会创建一个I/O完成端口,并使其与一个或多个文件句柄发生关联。I/O完成端口是内核对象。

baidu_16370559的博客 1962

PHP版本对接支付宝支付接口 电脑网站 详细介绍 沙箱环境 超简单易懂

PHP版本对接支付宝支付接口 其实理顺了思路后,按照我接下来的步骤来,真的超级简单啊,为啥有那么多的朋友们折腾了那么久呢,嘿嘿,跟我走吧~ 我是昨天晚上洗完澡之后,大概八九点,才开始正式开工尝试去这一工程的,我去支付宝的蚂蚁金服开放平台里把各个知识点和文档大概都看了一遍,大致弄明白了要怎么操作了,建议大家看看电脑网站开发文档,忙到了夜里十二点左右,成功地用支付宝给的Demo完成了付款操...

爱玲姐姐的博客 1万+

(四)Windows网络模型之完成端口模型详解

完成端口模型是重叠IO模型的升级版,它解决了重叠IO模型中线程过多导致效率下降的问题。 在完成端口模型中,我们新创建一个完成端口变量,并将所有的socket(包括服务器socket和客户端通信socket)都绑定到完成端口上。然后使用AcceptEx()、WSARecv()、WSASend()函数异步投递相应的任务,等任务完成后操作系统将完成通知放进通知队列中。 之后程序员创建合理数目的线程,在线程函数中取出通知队列的头部,然后分析并分类处理。 该模型所有函数执行部分都是异步的,而且不存在线程滥用问题

DongZhaoCheng 1422

HWSD2.0土壤数据处理实战:从下载到属性提取全流程解析

本文详细解析了HWSD2.0全球土壤数据库从数据下载、属性筛选到GIS空间连接与提取的全流程实战方法。重点介绍了如何利用ArcGIS Pro等工具,将土壤单元编码与黏粒含量等属性表关联,最终生成全球土壤属性专题栅格图,为农业规划与生态研究提供关键数据支撑。

weixin_29214691的博客 610

单片机笔记十二:华大HC32L136超低功耗设计实战

本文详细介绍了华大HC32L136单片机的超低功耗设计实战,包括深度睡眠模式下仅0.5μA的电流消耗、五种功耗模式的对比与配置、外设使用技巧及硬件级优化方法。通过实际项目案例,展示了如何利用ARM Cortex-M0+内核的HC32L136显著延长电池寿命,适用于智能门锁、额温枪等低功耗设备。

weixin_29189373的博客 393

2022-08-23 Windows_iocp一般编程方法

演示IOCP编程的一般方法,希望对有的同学能起到帮助;

程序员沙子的专栏 576

使用Simulink设计并实现一个可调谐的二阶IIR陷波滤波器,实时去除音频中的工频噪声

《基于Simulink的音频陷波滤波器设计与实现》摘要:本文详细介绍了使用Simulink设计陷波滤波器去除音频工频噪声(如50Hz)的方法。核心内容包括:1)二阶IIR陷波滤波器的原理与传递函数;2)Simulink实现步骤(音频系统搭建、滤波器设计、频率跟踪);3)性能分析(频谱对比、时域波形、听觉测试)。通过精准消除特定频率干扰,同时保留语音信号(200Hz-4kHz),有效提升信噪比(>20dB)。文章还探讨了多陷波级联、自适应算法等高级技巧,为音频处理、语音通信等应用提供实用解决方案。

amy_mhd的博客 153

2.5.3 windows编程iocp

2.5.3 windows编程iocp

weixin_52423494的博客 1205

Sigrity Power Tree如何进行直流压降仿真分析操作指导

Sigrity Power Tree模式可以用于前仿真,在没有layout文件的情况下对电源进行直流压降仿真分析,用于评估原理图设计以及器件选型是否合理。Model:设置为Equal Current,设置为等电源模型,意思该负载每个电源pin都是等电流的。Current:设置每个负载的电流,U30为3A,U3-U6各为1A。Nominal Current:设置能够承载的最大电流,设置为10A。Upper/ Lower Tol:设置为压降范围为5%Output Current:设置输出电流为10A。

weixin_54787054的博客 730

论文工具——写论文好用的绘图工具(甘特图+流程图+网络模型图+泳道图)

* 在写HiFi-GAN论文的代码阅读过程中,我发现仅仅通过文字来描述网络结构,不够详细,所以想绘制出网络结构图,更加具象化的描述出网络结构。想去花了,才发现之前都是通过在线绘图网站画的,费时费力,所以想找一些专门的网站化出比较规范并且高质量的图。一方面是为了方便讲解,提高论文的质量,另外一方面也是为了以后写论文打下良好的基础。 * 这篇文章会根据我以前的画图经验展开,以前是使用绘图软件,手动绘图。后来,看到了其他的方法,但是需要写一些代码,或者需要安装特定的软件,投入成本太大,就没有学。所以,本文分享的工

Blackoutdragon的博客 1万+

【网络编程】完成端口 IOCP

执行一个文件的I/O 操作处理具有关联的I/O 完成端口,在I/O 操作完成时I/O 系统发送 完成通知包到完成端口。其次,我们需要知道,所谓的完成端口其实和 HANDLE 一样,也是一个内核对象, Windows 大师Jeff Richter曾说,“完成端口可能是最为复杂的内核对象了”,但是我们也不 用去管它复杂,因为具体的内部是如何实现的和我们无关,只要我们能够学会用它相关的API 把这个完成端口的框架搭建起来就可以了。然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。

Antonio915的博客 904

LDRA Testbed(TBrun)软件单元测试_实例讲解(对多次调用的函数打桩)

在之前的文章《LDRA Testbed(TBrun)软件单元测试_操作指南》中,已经讲解了如何使用TBrun进行软件单元测试的基本操作步骤。本篇文章将结合实例进一步讲解被测函数中包含多次调用其他函数时,如何对其打桩来实现测试目的(详细的操作流程本文不再重述,若有不清楚的,可以结合之前的操作指南一起来看)。本文以一个被测函数作为示例,讲解了如何使用Testbed(TBrun)对涉及到多次调用其他函数的被测函数进行单元测试。本文的示例可能比较简单,但是思路、方法和流程都是通用的,希望对大家有所帮助。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1462

网络编程--IOCP完成端口

在此之前,我们介绍了Windows网络编程中常见的几种IO模型及应用,相信后续在实际工作中碰到也能了解其实现,本文介绍的最后一种IO模型–IOCP完成端口在Windows网络编程中极为常见,因此需熟练掌握应用,本文的最后也简单分析了一下几种IO模型的差异以加深对几种IO模型的理解。至此,网络编程的学习将告一段落,这段的学习中均使用简单的回声服务器作为示例介绍,在更为复杂的工作环境中,应学会在公司现有框架中变通。

SNAKEpc12138的博客 892

构建基于知识图谱的金融监管合规系统

金融行业是一个高度监管的领域,金融机构需要遵守众多复杂的法规和政策。传统的金融监管合规方式往往依赖于人工审查和简单的规则引擎,效率低下且容易出错。构建基于知识图谱的金融监管合规系统的目的在于利用知识图谱强大的知识表示和推理能力,实现对金融业务数据的自动化分析和合规检查,提高监管合规的效率和准确性。本系统的范围涵盖了金融机构的各类业务,如银行业务、证券业务、保险业务等。

AI天才研究院 1166

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

《TCP/IP网络编程》IOCP 完成端口技术

IOCP 完成端口技术 完成端口技术,IOCP(complete port) 就是系统帮你完成网络IO操作,在客户端极多的情况下,这种模型效率很高。 多线程模型下:每个客户端都分配一个线程的话,那么CPU会把大部分时间片都浪费在线程之间的调度上,而不是每个线程中对网络数据的处理上。 而I/O重叠模型让CPU的工作更多集中在网络数据的处理而非线程调度。 一个很有趣的比喻:IOCP技术相当于...

ChristmasError的博客 561

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C++ 网络编程:完成端口IOCP

IOCP(I/O Completion Ports)是Windows操作系统提供的一种高效的异步I/O模型,主要用于处理大量并发I/O请求的应用程序。

C/C++Linux、音视频、DPDK 1048

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

网络编程对象socke中的IOCP完成端口

为什么要采用Socket模型,而不直接使用Socket? 原因源于recv()方法是堵塞式的,当多个客户端连接服务器时,其中一个socket的recv调用时,会产生堵塞,使其他链接不能继续。这样我们又想到用多线程来实现,每个socket链接使用一个线程,这样效率十分低下,根本不可能应对负荷较大的情况。于是便有了各种模型的解决方法,总之都是为了实现多个线程同时访问时不产生堵塞。 完成端口(IOCP)模型: 首先来说为什么要使用完成端口:原因还是因为为了解决recv方法为阻塞式的问题,Wi...

丰空岛主(Vega Prime,Android,LabWindows,ThreeJS,Python,OpenCV) 470

【Windows网络编程】完成端口IOCP介绍(超详细)

这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方面面的信息,从API的用法到使用的步骤,从完成端口的实现机理到实际使用的注意事项,都有所涉及,并且为了让朋友们更直观的体会完成端口的用法,本文附带了有详尽注释的使用MFC编写的图形界面的示例代码。         我的初衷是希望写一份互联网上能找到的最详尽的关于完成端口的教学文档,而且让对Socket编程略有了解的人都能够

AG的博客 9317

【Windows网络编程】完成端口IOCP原理及案例

IOCP(I/O Completion Port,I/O完成端口)是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。在处理多个并发的异步I/O请求时,以往的模型都是在接收请求是创建一个线程来应答请求。这样就有很多的线程并行地运行在系统中。而这些线程都是可运行的,Windows内核花费大量的时间在进行线程的上下文切换,并没有多少时间花在线程运行上。再加上创建新线程的开销

AG的博客 1570

完成端口IOCP 流程

参考:《windows网络编程》、度娘、谷歌、还有一篇博客和它的源码http://blog.youkuaiyun.com/piggyxp/article/details/6922277,感谢PiggyXP,不过我的代码有更好的可读性,感谢broadcom的嵌入式C++系统带给我的编程经验,不过流程基本相似,可以关注一些细节 HttpServer\targetver.h:        Win

liu_qiqi的专栏 3112

《TCP/IP网络编程》第23章 IOCP

《TCP/IP网络编程》第23章通过重叠I/O理解IOCP非阻塞模式的套接字纯重叠方式实现回声服务器端重新实现客户端从重叠I/O模型到IOCP模型分阶段实现IOCP程序创建“完成端口"连接完成端口对象和套接字确认完成端口已完成的I/O和线程的I/O处理IOCP回声服务器端IOCP特点 通过重叠I/O理解IOCP IOCP(Input Output Completion Port,输入输出完成端口)。 非阻塞模式的套接字 SOCKET hLisnSock; int mode=1; hLisnSock=WSA

yxqq378287007的博客 458

IOCP的笔记及理解

WIN下最好的网络模型可能就是IOCP完成端口了吧 经过几天的研究可以使用以下比喻来理解完成端口, 完成端口中的完成表示IO操作已经完成后才通知程序,完成端口可以更形象的想象成是完成队列 这里我将完成队列想象成一个管道。 网络库初始化部分省略 第一步:首先主负责人(主线程)在一个房子(服务器)里建立一个管道 程序实现 HANDLE hIOCP = CreateIoCompleti

Debug8的专栏 707

iocp模型

发现Windows下有一种号称性能最好的通信模型,叫做IOCP,中文名称叫做完成端口模型。

前进的博客 2494

Windows的多路复用IOCP

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

工作学习记录 640
上一篇: Libevent参考手册:使用libevent的DNS:高层和底层功能 (2011-08-11 21:13:16)
下一篇: 使用libevent编写linux服务(一)
CrazyCode_Lee
博客等级 码龄15年 3粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值