对LR中报WSA_IO_pending的解析-Zee
- 格式:doc
- 大小:42.50 KB
- 文档页数:3
10004—WSAEINTR函数调用中断。
该错误表明由于对WSACancelBlockingCall的调用,造成了一次调用被强行中断。
10009—WSAEBADF文件句柄错误。
该错误表明提供的文件句柄无效。
在MicrosoftWindowsCE下,socket函数可能返回这个错误,表明共享串口处于“忙”状态。
10013—WSAEACCES权限被拒。
尝试对套接字进行操作,但被禁止。
若试图在sendto或WSASendTo中使用一个广播地址,但是尚未用setsockopt和SO_BROADCAST这两个选项设置广播权限,便会产生这类错误。
10014—WSAEFAULT地址无效。
传给Winsock函数的指针地址无效。
若指定的缓冲区太小,也会产生这个错误。
10022—WSAEINVAL参数无效。
指定了一个无效参数。
例如,假如为WSAIoctl调用指定了一个无效控制代码,便会产生这个错误。
另外,它也可能表明套接字当前的状态有错,例如在一个目前没有监听的套接字上调用accept或WSAAccept。
10024—WSAEMFILE打开文件过多。
提示打开的套接字太多了。
通常,Microsoft提供者只受到系统内可用资源数量的限制。
10035—WSAEWOULDBLOCK资源暂时不可用。
对非锁定套接字来说,如果请求操作不能立即执行的话,通常会返回这个错误。
比如说,在一个非暂停套接字上调用connect,就会返回这个错误。
因为连接请求不能立即执行。
10036—WSAEINPROGRESS操作正在进行中。
当前正在执行非锁定操作。
一般来说不会出现这个错误,除非正在开发16位Winsock应用程序。
10037—WSAEALREADY操作已完成。
一般来说,在非锁定套接字上尝试已处于进程中的操作时,会产生这个错误。
比如,在一个已处于连接进程的非锁定套接字上,再一次调用connect或WSAConnect。
另外,服务提供者处于执行回调函数(针对支持回调例程的Winsock函数)的进程中时,也会?出现这个错误。
WOSA3.0错误码1.公共错误码(-2) WOSA版本不对(-3) WOSA版本不对(-4) 操作取消(-5) 注册表配置不对(-6) 注册表配置不对(-7) 注册表配置不对(-8) 注册表配置不对(-9) 注册表配置不对(-10) 注册表配置不对(-11) 注册表配置不对(-12) 注册表配置不对(-13) 设备没有准备好,设备故障(-14) 设备故障(-15) 内部错误(-16) 无效地址(-17) 无效的APP句柄(-18) 无效的缓冲区(-19) 无效的命令种类(-20) 无效的操作命令(-21) 无效的事件类别(-22) 无效的服务句柄(-23) 无效的服务句柄WFS_ERR_INVALID_HWND (-24) 无效的窗口句柄WFS_ERR_INVALID_HWNDREG (-25) 无效的参数WFS_ERR_INVALID_POINTER (-26) 无效的指针WFS_ERR_INVALID_REQ_ID (-27) 无效的请求IDWFS_ERR_INVALID_RESULT (-28) 无效的返回结果WFS_ERR_INVALID_SERVPROV (-29) 无效的SP,可能sp服务没有启动WFS_ERR_INVALID_TIMER (-30) 无效的参数WFS_ERR_INVALID_TRACELEVEL (-31) 无效的日志级别WFS_ERR_LOCKED (-32) 服务已经被加锁WFS_ERR_NO_BLOCKING_CALL (-33) 不能调用BLOCKING CALLWFS_ERR_NO_SERVPROV (-34) sp不存在,可能sp服务没有启动WFS_ERR_NO_SUCH_THREAD (-35) 线程不存在WFS_ERR_NO_TIMER (-36) 计时器创建失败WFS_ERR_NOT_LOCKED (-37) 加锁不成功WFS_ERR_NOT_OK_TO_UNLOAD (-38) 不能加载sp的dllWFS_ERR_NOT_STARTED (-39) StartUp失败WFS_ERR_NOT_REGISTERED (-40) 没有注册事件WFS_ERR_OP_IN_PROGRESS (-41) 操作正在执行中WFS_ERR_OUT_OF_MEMORY (-42) 内存溢出WFS_ERR_SERVICE_NOT_FOUND (-43) WOSA版本不对WFS_ERR_SPI_VER_TOO_HIGH (-44) WOSA版本不对WFS_ERR_SPI_VER_TOO_LOW (-45) WOSA版本不对WFS_ERR_SRVC_VER_TOO_HIGH (-46) WOSA版本不对WFS_ERR_SRVC_VER_TOO_LOW (-47) WOSA版本不对WFS_ERR_TIMEOUT (-48) 操作超时WFS_ERR_UNSUPP_CATEGORY (-49) 不支持的查询类别WFS_ERR_UNSUPP_COMMAND (-50) 不支持的操作命令WFS_ERR_VERSION_ERROR_IN_SRVC (-51) WOSA版本错误WFS_ERR_INVALID_DATA (-52) 无效的数据WFS_ERR_SOFTWARE_ERROR (-53) 软件错误WFS_ERR_CONNECTION_LOST (-54) 连接断开WFS_ERR_USER_ERROR (-55) 用户使用错误WFS_ERR_UNSUPP_DATA (-56) 不支持的数据2.PrinterWFS_ERR_PTR_FORMNOTFOUND (-100) FORM未找到WFS_ERR_PTR_FIELDNOTFOUND (-101) FIELD未找到WFS_ERR_PTR_NOMEDIAPRESENT (-102) 缺纸WFS_ERR_PTR_READNOTSUPPORTED (-103) 设备不支持读操作WFS_ERR_PTR_FLUSHFAIL (-104) 不支持FLUSHWFS_ERR_PTR_MEDIAOVERFLOW (-105) Media超域WFS_ERR_PTR_FIELDSPECFAILURE (-106) Field语法错误WFS_ERR_PTR_FIELDERROR (-107) 处理Field时发生错误WFS_ERR_PTR_MEDIANOTFOUND (-108) Media未找到WFS_ERR_PTR_EXTENTNOTSUPPORTED (-109) 设备无法获得范围WFS_ERR_PTR_MEDIAINV ALID (-110) 无效的MediaWFS_ERR_PTR_FORMINV ALID (-111) 无效的FormWFS_ERR_PTR_FIELDINV ALID (-112) 无效的FieldWFS_ERR_PTR_MEDIASKEWED (-113) Media错误WFS_ERR_PTR_RETRACTBINFULL (-114) 回收箱满WFS_ERR_PTR_STACKERFULL (-115) STACKE满WFS_ERR_PTR_PAGETURNFAIL (-116) 设备不能翻页WFS_ERR_PTR_MEDIATURNFAIL (-117) 设备不能翻转介质WFS_ERR_PTR_SHUTTERFAIL (-118) Shutter执行命令失败WFS_ERR_PTR_MEDIAJAMMED (-119) 卡纸WFS_ERR_PTR_FILE_IO_ERROR (-120) 文件读取失败WFS_ERR_PTR_CHARSETDATA (-121) 字符集不一致WFS_ERR_PTR_PAPERJAMMED (-122) 卡纸WFS_ERR_PTR_PAPEROUT (-123) 缺纸WFS_ERR_PTR_INKOUT (-124) 墨水用玩WFS_ERR_PTR_TONEROUT (-125) 色带用玩WFS_ERR_PTR_LAMPINOP (-126) 成象灯不可操作WFS_ERR_PTR_SOURCEINVALID (-127) 资源无效WFS_ERR_PTR_SEQUENCEINVALID (-128) 命令序列不对WFS_ERR_PTR_MEDIASIZE (-129) 介质的长度不对3.CardReaderWFS_ERR_IDC_MEDIAJAM (-200) 卡堵塞WFS_ERR_IDC_NOMEDIA (-201) 没有卡WFS_ERR_IDC_MEDIARETAINED (-202) 吞卡WFS_ERR_IDC_RETAINBINFULL (-203) 吞卡箱满WFS_ERR_IDC_INV ALIDDATA (-204) 无效的数据WFS_ERR_IDC_INV ALIDMEDIA (-205) 无效的MediaWFS_ERR_IDC_FORMNOTFOUND (-206) Form未找到WFS_ERR_IDC_FORMINV ALID (-207) Form无效WFS_ERR_IDC_DATASYNTAX (-208) 数据语法错误WFS_ERR_IDC_SHUTTERFAIL (-209) 打开Shutter失败WFS_ERR_IDC_SECURITYFAIL (-210) 安全检测失败WFS_ERR_IDC_PROTOCOLNOTSUPP (-211) 协议不支持WFS_ERR_IDC_ATRNOTOBTAINED (-212) ATR未获得WFS_ERR_IDC_INVALIDKEY (-213) Key无效WFS_ERR_IDC_WRITE_METHOD (-214) 不支持写的操作WFS_ERR_IDC_CHIPPOWERNOTSUPP (-215) 不支持IC读写WFS_ERR_IDC_CARDTOOSHORT (-216) 卡长度过短WFS_ERR_IDC_CARDTOOLONG (-217) 卡长度过长4.CashDispenserWFS_ERR_CDM_INVALIDCURRENCY (-300) 无效的币种WFS_ERR_CDM_INVALIDTELLERID (-301) 无效的TellerIDWFS_ERR_CDM_CASHUNITERROR (-302) 钞箱故障WFS_ERR_CDM_INVALIDDENOMINATION (-303) 无效的配钞WFS_ERR_CDM_INVALIDMIXNUMBER (-304) 参数错误WFS_ERR_CDM_NOCURRENCYMIX (-305) 参数错误WFS_ERR_CDM_NOTDISPENSABLE (-306) 无法挖出指定的钞票WFS_ERR_CDM_TOOMANYBILLS (-307) 要求挖的钞票过多,无法挖出WFS_ERR_CDM_INVALIDPOSITION (-308) 无效的位置WFS_ERR_CDM_POSITIONLOCKED (-309) 出口位置被锁住WFS_ERR_CDM_SAFEDOOROPEN (-310) 挖钞时安全门是打开的,无法挖钞WFS_ERR_CDM_INVALIDRETRACT (-311) Retract命令无效WFS_ERR_CDM_SHUTTERNOTOPEN (-312) Shutter打开失败WFS_ERR_CDM_SHUTTEROPEN (-313) Shutter已经打开WFS_ERR_CDM_SHUTTERCLOSED (-314) Shutter已经关闭WFS_ERR_CDM_INVALIDCASHUNIT (-315) 无效的钞箱编号WFS_ERR_CDM_NOBILLS (-316) 没有钞票WFS_ERR_CDM_EXCHANGEACTIVE (-317) 设备处于维护状态中WFS_ERR_CDM_NOEXCHANGEACTIVE (-318) 设备未处于维护状态中WFS_ERR_CDM_SHUTTERNOTCLOSED (-319) Shutter关闭失败WFS_ERR_CDM_PRERRORNOBILLS (-320) 送钞时没有钞票WFS_ERR_CDM_PRERRORBILLS (-321) 送钞时发生错误,并且部分钞票已送出WFS_ERR_CDM_PRERRORUNKNOWN (-322) 送钞时发生错误,钞票位置未知WFS_ERR_CDM_BILLSTAKEN (-323) 收钞时部分或全部钞票被取走WFS_ERR_CDM_TOOMANYCOINS (-324) 要求挖的硬币过多WFS_ERR_CDM_CASHINACTIVE (-325) 设备处于存款过程中WFS_ERR_CDM_NOCASHINSTARTED (-326) 没有开始存款过程WFS_ERR_CDM_INVALIDMIXTABLE (-327) 无效的配钞表WFS_ERR_CDM_OUTPUTPOS_NOT_EMPTY (-328) 出钞口有钞票WFS_ERR_CDM_INVALIDRETRACTPOSITION (-329) 回收钞票位置无效WFS_ERR_CDM_NOTRETRACTAREA (-330) 指定的回收位置不支持WFS_ERR_CDM_NOCASHBOXPRESENT (-333) 没有Cash boxWFS_ERR_CDM_AMOUNTNOTINMIXTABLE (-334) 指定的配钞没有在配钞表中WFS_ERR_CDM_ITEMSNOTTAKEN (-335) 钞票未拿走WFS_ERR_CDM_ITEMSLEFT (-336)) 钞票遗留在钞道或出钞口上5.PinpadWFS_ERR_PIN_KEYNOTFOUND (-400) 按键未找到WFS_ERR_PIN_MODENOTSUPPORTED (-401) 不支持的模式WFS_ERR_PIN_ACCESSDENIED (-402) 访问拒绝WFS_ERR_PIN_INVALIDID (-403) ID无效WFS_ERR_PIN_DUPLICATEKEY (-404) Key已存在WFS_ERR_PIN_KEYNOVALUE (-406) Key没有加载WFS_ERR_PIN_USEVIOLATION (-407) Key使用不对WFS_ERR_PIN_NOPIN (-408) 键盘中没有密码WFS_ERR_PIN_INVALIDKEYLENGTH (-409) 无效的Key长度WFS_ERR_PIN_KEYINVALID (-410) 无效的按键WFS_ERR_PIN_KEYNOTSUPPORTED (-411) 存在不支持的按键WFS_ERR_PIN_NOACTIVEKEYS (-412) 没有激活任何按键WFS_ERR_PIN_INVALIDKEY (-413) 无效的keyWFS_ERR_PIN_NOTERMINATEKEYS (-414) 没有终止键WFS_ERR_PIN_MINIMUMLENGTH (-415) 最小密码长度无效WFS_ERR_PIN_PROTOCOLNOTSUPP (-416) 协议不支持WFS_ERR_PIN_INVALIDDATA (-417) 无效的数据WFS_ERR_PIN_NOTALLOWED (-418) 不允许进行操作WFS_ERR_PIN_NOKEYRAM (-419) Key RAM空间不够WFS_ERR_PIN_NOCHIPTRANSACTIVE (-420) 还没开始ChipTransactionWFS_ERR_PIN_ALGORITHMNOTSUPP (-421) 算法不支持WFS_ERR_PIN_FORMATNOTSUPP (-422) 格式不支持WFS_ERR_PIN_HSMSTATEINVALID (-423) HSMSTATE无效WFS_ERR_PIN_MACINVALID (-424) MAC无效WFS_ERR_PIN_PROTINVALID (-425) 协议无效WFS_ERR_PIN_FORMATINVALID (-426) 格式无效WFS_ERR_PIN_CONTENTINVALID (-427) 内容无效6.TTUWFS_ERR_TTU_FIELDERROR (-701) Field错误WFS_ERR_TTU_FIELDINVALID (-702) Field无效WFS_ERR_TTU_FIELDNOTFOUND (-703) Field未找到WFS_ERR_TTU_FIELDSPECFAILURE (-704) Field语法错误WFS_ERR_TTU_FORMINV ALID (-705) 无效的FormWFS_ERR_TTU_FORMNOTFOUND (-706) Form未找到WFS_ERR_TTU_INV ALIDLED (-707) LED无效WFS_ERR_TTU_KEYCANCELED (-708) 按键取消WFS_ERR_TTU_MEDIAOVERFLOW (-709) Media超域WFS_ERR_TTU_RESNOTSUPP (-710) 分辨率不支持WFS_ERR_TTU_CHARSETDATA (-711) 字符集不对WFS_ERR_TTU_KEYINVALID (-712) 按键无效WFS_ERR_TTU_KEYNOTSUPPORTED (-713) 按键不支持WFS_ERR_TTU_NOACTIVEKEYS (-714) 没有激活任何按键7.SIUWFS_ERR_SIU_INVALID_PORT (-801) 端口无效WFS_ERR_SIU_SYNTAX (-802) 参数错误WFS_ERR_SIU_PORT_ERROR (-803) 执行命令时硬件故障8.CashAcceptorWFS_ERR_CIM_INVALIDCURRENCY (-1300) 无效币种WFS_ERR_CIM_INVALIDTELLERID (-1301) 无效的TellerIDWFS_ERR_CIM_CASHUNITERROR (-1302) 钞箱故障WFS_ERR_CIM_TOOMANYITEMS (-1307) 存款放入的钞票过多WFS_ERR_CIM_UNSUPPOSITION (-1308) 指定的位置不支持WFS_ERR_CIM_SAFEDOOROPEN (-1310) 存款时安全门是打开的WFS_ERR_CIM_SHUTTERNOTOPEN (-1312) Shutter打开失败WFS_ERR_CIM_SHUTTEROPEN (-1313) Shutter已经打开WFS_ERR_CIM_SHUTTERCLOSED (-1314) Shutter已经关闭WFS_ERR_CIM_INVALIDCASHUNIT (-1315) 无效的钞箱编号WFS_ERR_CIM_NOITEMS (-1316) 没有钞票WFS_ERR_CIM_EXCHANGEACTIVE (-1317) 设备处于维护状态WFS_ERR_CIM_NOEXCHANGEACTIVE (-1318) 设备没有处于维护状态WFS_ERR_CIM_SHUTTERNOTCLOSED (-1319) Shutter关闭失败WFS_ERR_CIM_ITEMSTAKEN (-1323) 回收钞票时部分钞票被拿走WFS_ERR_CIM_CASHINACTIVE (-1325) 设备处于存款过程中WFS_ERR_CIM_NOCASHINACTIVE (-1326) 设备没有处于存款过程中WFS_ERR_CIM_POSITION_NOT_EMPTY (-1328) 入钞或出钞口有钞票WFS_ERR_CIM_INVALIDRETRACTPOSITION (-1334) 回收位置无效WFS_ERR_CIM_NOTRETRACTAREA (-1335) 指定的回收位置不可用。
WSAIoctl函数详解套接字选项和I/O控制命令套接字一旦建立,通过套接字选项和I/O控制命令对各种属性进行操作,便可对套接字的行为产生影响。
有的选项只用于信息的返回,而有的选项则可在应用程序中影响套接字的行为。
I / O控制命令肯定会对套接字的行为产生影响。
下面着重讨论四个Winsock函数:getsockopt、setsocketopt、ioctlsocket和WSAIoctl 。
每个函数都有大量命令。
这些I/O控制命令和选项大多定义在Winsock.h或Winsock2.h内,具体取决于它们到底从属于Winsock 1,还是从属于Winsock 2。
但是,也有少数几个选项是Microsoft提供者或某种传输协议所特有的。
微软特有的一些扩展定义在Winsock.h和Mswsock.h 这两个头文件内。
而传输提供者扩展定义在与其协议对应的头文件内。
针对那些传输特有选项,我们将随选项一道,指明正确的头文件是什么。
要注意的是,若应用程序使用了微软特有的扩展,那么必须同Mswock.lib建立链接。
套接字选项对getsocketopt(获得套接字选项)函数来说,它的常见用法是获得与指定套接字相关的信息。
其原型如下:int getsocketopt(SOCKKET s,int level,int optname,char FAR* optval,int optlen)s 指定的是一个套接字,我们打算在这个套接字上执行指定的选项。
对你打算使用的具体协议来说,这个套接必须是有效的。
大多数选项都是一种特定的协议和套接字类型专有的,而其他选项适用于所有类型的套接字(特别是第二个参数level)。
optname参数是我们在此真正感兴趣的选项。
这些选项名均在Winsock头文件内定义的常数值。
最常见的与协议无关选项(比如和SOL_SOCKET级别关联在一起的选项)是在Winsock.h和Winsock2.h这两个头文件中定义的。
PTN告警总结紧急告警1、ETH_LOS该端口无收光。
2、ETH_LINK_DOWN协商失败原因:两侧端口协商结果不一致,例如一侧为100M全双工,一侧为半双工;单通,光口收或发断。
一端端口报ETH_LOS,而另一侧报ETH_LINK_DOWN。
3、HARD_BAD设备检测到对应告警板位硬件故障4、LSR_NO_FITED未安装光模块5、LSR_WILL_DIE光模块老化告警。
即使用寿命。
6、MPLS_TUNNEL_LOCVTunnel层面告警。
该tunnel中断链路故障。
原因:断纤、链路拥塞等。
7、NE_COMMU_BREAK脱管告警。
网元与网管通讯中断。
8、NE_NOT_LOGIN网元未登陆。
用户未登陆该网元;用户登陆失败;通讯中断。
9、OUT_PWR_ABN输出光功率异常。
单板故障或光功率过高、过低。
10、SWDL_NEPKGCHECK软件问题。
重要告警1、BD_STATUS单板不在位。
2、CFCARD_FAILED对CF卡操作失败而产生的告警CF卡故障;主控故障。
3、CLK_LOCK_FAIL时钟同步失败。
或者上游站未配置时钟,可能产生两侧断纤引起4、COMMUN_FAIL当主控板和其他单板之间的通讯中断时就会上报此告警。
可能单板在处于复位状态。
5、CPU_BUSY当主控板检测到CPU占用率超过上门限时,即上报此告警。
6、DCNSIZE_OVER(PTN-3900)当网关网元的主控板检测到DCN子网内非网关网元的数量超过上限值时,即上报此告警。
7、ETH_APS_SWITCH_FAIL表示保护倒换失败告警。
当端口发送的APS(Automatic Protection Switching)帧中请求信号与收到的APS帧中桥接信号不一致并达到50ms时,表示倒换失败,上报该告警。
(tunnel层面工作和保护同时中断发生倒换失败)8、ETH_APS_TYPE_MISMATCHETH_APS_TYPE_MISMATCH为保护类型信息不一致告警。
LoadRunner出现error问题及解决方法总结 一、Step download timeout (120 seconds)这是一个经常会遇到的问题,解决得办法走以下步骤:1、修改run time setting中的请求超时时间,增加到600s,其中有三项的参数可以一次都修改了,HTTP‐request connect timeout,HTTP‐request receieve timeout,Step download timeout,分别建议修改为600、600、5000。
run time setting设置完了后记住还需要在control组件的option的run time setting中设置相应的参数。
2、办法一不能解决的情况下,解决办法如下:设置runt time setting中的internet protocol‐preferences中的advaced区域有一个winlnet replay instead of sockets选项,选项后再回放就成功了。
切记此法只对windows系统起作用,此法来自zee的资料。
二、Connection reset by peer.这个问题不多遇见,一般是由于下载的速度慢,导致超时,所以,需要调整一下超时时间。
解决办法:Run‐time setting窗口中的‘Internet Protocol’-‘Preferences’设置set advanced options(设置高级选项),重新设置一下“HTTP‐request connect timeout(sec),可以稍微设大一些”。
三、connection refused这个的错误的原因比较复杂,也可能很简单也可能需要查看好几个地方,解决起来不同的操作系统方式也不同。
1、首先检查是不是连接weblogic服务过大部分被拒绝,需要监控weblogic的连接等待情况,此时需要增加acceptBacklog,每次增加25%来提高看是否解决,同时还需要增加连接池和调整执行线程数,(连接池数*Statement Cache Size)的值应该小于等于oracle数据库连接数最大值。
signal_pending函数
signal_pending函数是一个用于检查当前进程是否有未处理的待处理信号的系统调用函数。
该函数可以帮助程序员判断当前进程是否有需要处理的信号,以便及时采取相应的措施。
signal_pending函数的使用方法非常简单,只需要在程序中调用该函数即可。
具体来说,程序员可以将该函数作为条件语句的判断条件,以便在需要处理信号的情况下及时采取相应的措施。
同时,signal_pending函数还可以用于在程序中实现不同的信号处理策略,以便更好地保证程序的稳定性和可靠性。
需要注意的是,signal_pending函数只能用于检查当前进程是否有未处理的待处理信号,不能用于处理信号。
如果程序需要处理信号,应该使用其他的系统调用函数,如signal、sigaction等。
总之,signal_pending函数是一个非常有用的系统调用函数,可以帮助程序员判断当前进程是否有需要处理的信号,并及时采取相应的措施。
对LR中报WSA_IO_pending的解析-Zee
Zee早期文档
首先:谢谢曹向志老师的指点。
下面来看一下这个问题:
问题出现
前几天一位珠海网友highoo问了一个问题:在使用LR进行性能测试的过程中出现了错误:
WSA_IO_PENDING,Message Code 27740。
官方troubleshooting如下:
Message Code 27740
Overlapped transmission of request to '%1' for URL 'URL' failed.
The transmission of data to the server failed. It could be a network, router, or server problem. The word Overlapped refers to the way LoadRunner sends data in order
to get a Web Page Breakdown.
Troubleshooting
Add the following statement to the beginning of the script to disable the breakdown of the "First Buffer" into server and network time:
web_set_sockets_option("OVERLAPPED_SEND", "0");
解决方式
添加:web_set_sockets_option("OVERLAPPED_SEND", "0")语句。
解析原因
IO Overlapped是一种异步IO,在 socket层,只有少量数据发送的时候,只要create new thread,send, receive,就可以了。
但是,当数据量增加的时候,要考虑资源的充分利用,也要避免资源的拥塞队列,如果创建线程过多,和CPU内存磁盘等资源的交互过多,可能导致拥塞出现。
在这时就要考虑资源的拥塞问题了,在socket中有两种处理的方式:
1, IO overlapped
工作方式是这样的:
A:调用WSARecv, WSARecvFrom, WSASend, WSASendTo, 或 WSAIoctl.等函数,传入
overlapped参数,表示这个函数要执行这个动作;
B:调用WSAGetOverlappedResult函数来取数据;
C:再执行A,调用另一个带有overlapped的参数另一个线程交替处理。
这种方式,可以处理一定量的数据。
但是在大数据量的时候,这种处理方式显示出了先天的不足。
因为使用这种方式会创建新的线程,这样势必增加系统的开销。
当出现成千上万的线程时,系统的开销已经相当大了,因为要频繁的在上下文之间切换。
所以在socket编程里,这种方式,处理线程数不是很大的情况下是比较有优势的。
2, IO completion port
在winsock2中引入了异步IO的API:IOCP。
其实这里也是overlapped的理念。
但有不同,
如下描述:
这种异步IO的工作方式是:先开一些线程,处在hold的状态下,应用线程和completion port 关联起来,当某个线程要处理数据时,就与completion port进行通信,这样就可以进行socket操作了,这种处理方式就是在刚开始的时候,消耗一些资源开线程,处理大数据量
的socket通信,如图:
这样一来completion port就可以处理threads和IO Device之间的交互了。
打个比方来说:
有很多人早上都去坐地铁,但是,如果不限制人往站台走的速度,售票口就要增加很多个才能处理乘客的请求,这样成本就会增加很多,并且站台上最后会挤满了人,最后导致危机出现;而现在,在进入地铁的时候,加上有序的限流措施,这样一来售票口不用增加,也可以处理乘客的请求,站台上就不会有那么大的压力。
在我的理解中,completion port就有着这么一个功能。
在处理大数据量的时候,它起着维
持秩序的作用。
以上为socket在处理数据量较大时的两种方式。
而在性能测试中,如果开的线程过多,可能某些资源不足导致不停的上下文切换,就会有
thread得不到资源,从而出现pending。
如果我们关闭了overlapped,就会同步执行。
这时如果CPU速度够快(同时其他资源是足够用的),是可以处理所有请求,并且不会出现 pending的。
但是,如果thread开的越来越多,也可能导致CPU处理不了,从而出现CPU频繁的上下文切换,或者队列增长。
最后出错。
这时,我们可以针对性的来提出解决方案了。