acceptex的简单介绍
完成端口,到底一个CPU 建几个线程
接下来看看完成端口(Completion Ports )
其实可以把完成端口看成系统维护的一个队列,操作系统把重叠IO操作完成的事件通知放到该队列里,由于是暴露 “操作完成”的事件通知,所以命名为“完成端口”(Completion Ports)。一个socket被创建后,可以在任何时刻和一个完成端口联系起来。

一般来说,一个应用程序可以创建多个工作线程来处理完成端口上的通知事件。工作线程的数量依赖于程序的具体需要。但是在理想的情况下,应该对应一个CPU创建一个线程。因为在完成端口理想模型中,每个线程都可以从系统获得一个“原子”性的时间片,轮番运行并检查完成端口,线程的切换是额外的开销。在实际开发的时候,还要考虑这些线程是否牵涉到其他堵塞操作的情况。如果某线程进行堵塞操作,系统则将其挂起,让别的线程获得运行时间。因此,如果有这样的情况,可以多创建几个线程来尽量利用时间。
总之,开发一个可扩展的Winsock服务器并非十分困难的。主要是开始一个监听socket,接收连接,并且进行重叠发送和接收的IO操作。最大的挑战就是管理系统资源,限制重叠Io的数量,避免内存危机。遵循这几个原则,就能帮助你开发高性能,可扩展的服务程序。
socket的接收缓冲,因为接收事件仅仅在AcceptEx调用中发生。保证每个socket都有一个接收缓冲不会造成什么危害。一旦客户端/服务器在最初的一次请求(由AcceptEx完成)之后进行交互,发送更多的数据,那么取消接收缓冲更是一个很不好的做法。除非你能保证这些数据都是在每个连接的重叠IO接收里完成的 。
向左转|向右转
编译器报错: 未知的类型名 LPFN_ACCEPTEX 需要的头文件包含了,库也链接了.用的是MinGW. 请问是咋回事?
在mingw需要自己定义,如下
typedef BOOL (WINAPI *LPFN_ACCEPTEX)(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED);
LPFN_ACCEPTEX lpfnAcceptEx = NULL;
httpd.exe内存占用量不断增大是为啥?
一招解决apache的httpd.exe进程大量吃内存
Published
by
cktMay02因为要运行两个ASP程序,所以昨天往上把服务器换成了win+apache的形式,但是出现了个非常严重的问题,就是httpd.exe吃大量内存,时间越久吃的越多,直到内存耗尽程序崩溃.
到apache的官方网站查询,原来默认设置适合2-8G内存的服务器使用…解决办法.修改配置文件http.conf,将Threadsperchild参数设为50左右(视你的配置适量减少即可,我设成了50因为服务器配置很差),同样的,适量减少MaxRequestsPerChild的数值.保存并重启apache即可.
ThreadsPerChild的意思是系统启动时默认启动的等待线程数,用来等待处理客户的请求。在使用AcceptEx时内存增长不明显并且可以降回20M左右,可能是因为用户来了请求线程分配了一些资源,此时内存增长,但用户访问完成后,这些资源都释放了(这些资源很可能都和用户相关,没法留着下个用户使用,所以都释放了)。但禁用了AcceptEx后,由于apache每个线程需要处理网络事件,因此每个线程的资源需要就多了,并且处理完一个用户的请求后,有些资源不想释放,是可以对下个用户重用的,这样就留在了里面。由于我的线程数设了550(估计网上很多人遇到这个类似于“memory
leak”问题的可能也都设的比较大或者机器虚拟内存较小),这样当线程较多时就会出现达到最大内存的情况,而且这种现象给人的感觉就是有内存泄漏,因为初始时是20M,来一个请求后线程分配一些资源(暂时不释放的),这样可能就变成了21M,如果同时有10个人访问,可能等他们访问完后就变成了50M.
请问mswsock.dll的功能和作用
mswsock - mswsock.dll - DLL文件信息
DLL 文件: mswsock 或者 mswsock.dll
DLL 名称: Microsoft Windows Sockets 2.0 Service Provider
mswsock.dll是Winsock网络服务相关文件。
属于: Windows Socket
系统 DLL文件: 是
常见错误: File Not Found, Missing File, Exception Errors
安全等级 (0-5): 0 间谍软件: 否
广告软件: 否
用wsock32.dll
Header: Declared in Mswsock.h.
Library: Use Mswsock.lib.
用ws_32.dl
Header: Declared in Winsock2.h.
Library: Use Ws2_32.lib.
wsock32.dll 提供了很多扩展socket API如AcceptEx,WSARecvex,其他同名函数,实际上还是再调用ws2_32.dll里的。
后面几个好像都不是系统的进程,阻止比较好!
