码迷,mamicode.com
首页 > 其他好文 > 详细

完成端口CreateIoCompletionPort编写高性能的网络模型程序

时间:2014-11-16 11:56:14      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   使用   sp   strong   数据   

1、同步网络模型:就是服务端同步阻塞等待客户端的请求,然后继续操作后续处理,缺点是性能低。
2、同步通讯+多线程模型:服务端为每个客户端分配线程,这个线程就负责这个客户端,同步通讯,同步处理这个客户端的请求,
   缺点就是当客户端很多时,线程很多,CPU在却换线程的上下文时会消耗很多资源,最终会导致CPU只用于处理上下文的却换而
   无法正常处理线程后续的流程操作
3、完成端口,是微软提供的高性能网络处理API,底层会建立一个请求队列,并且分配几个线程等待处理。每个线程从队列里取请求
   处理,处理完成后通知应用程序接收数据。然后继续从队列取数据继续处理。这几个线程会公平的处理数据。

完成端口函数原型
HANDLE CreateIoCompletionPort (
  HANDLE FileHandle, // handle to file
HANDLE ExistingCompletionPort, // handle to I/O completion port
  ULONG_PTR CompletionKey, // completion key
  DWORD NumberOfConcurrentThreads // number of threads to execute concurrently
);
我们使用时:
HANDLE m_hIOCompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0 ); 
最后一个参数NumberOfConcurrentThreads 当前线程执行个数,当为0时,每个处理器上只运行一个线程了。如果当前CUP是双核的,
那么只能允许两个线程同时执行,避免CPU线程之间的却换带来的性能影响。虽然是这么多,但一般是 CPU核心数量*2 比较合适。可以
充分利用CPU资源。
参考:
http://blog.csdn.net/piggyxp/article/details/6922277
 

完成端口CreateIoCompletionPort编写高性能的网络模型程序

标签:style   blog   http   io   ar   使用   sp   strong   数据   

原文地址:http://www.cnblogs.com/bizhu/p/4101203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!