ASP 로"다 중 스 레 드"를 엽 니 다.

인터넷 에서 ASP 로 연 가짜 스 레 드 를 찾 았 는데 제 가 예전 에 했 던 프로그램 과 약속 이나 한 듯 이 일치 하 는 것 을 발 견 했 습 니 다.다만 예전 에 사용 한 것 은 VB 이 고 떼 어 내 고 비축 한 것 입 니 다.
1.원리 실험 원 리 는 물론 모두 같 습 니 다.웹 서버 를 이용 하여 다 중 스 레 드 를 지원 하고 같은 페이지 에서 서버 에 여러 http 요청 을 보 내 서 우리 의 일 을 완성 합 니 다.한 페이지 에 txt 파일 2 개 를 동시에 써 서 기록 시간의 차 이 를 비교 해 보 는 것 이 좋 습 니 다.코드 는 다음 과 같 습 니 다:<%
startime=timer()'--------------------'function runThread()dim Httpset Http=Server.createobject("Msxml2.XMLHTTP")Http.open"GET","http://127.0.0.1/thread.asp?action=b",falseHttp.send() end functionfunction a()dim Content,FilePath,MyFileContent=now()&chr(30)&timer()FilePath=server.MapPath("a.txt")Set fso = CreateObject("Scripting.FileSystemObject")Set MyFile = fso.CreateTextFile(FilePath, True)MyFile.Write(Content)MyFile.Closeend functionfunction b()dim Content,FilePath,MyFileContent=now()&chr(30)&timer()FilePath=server.MapPath("b.txt")Set fso = CreateObject("Scripting.FileSystemObject")Set MyFile = fso.CreateTextFile(FilePath,True)MyFile.Write(Content)MyFile.Closeend functionif(Request.QueryString("action")=")thenrun Thread()a()elseb()end if%>Script Execution Time:<%=fix((timer()-startime)*1000)%>ms 가 실 행 된 결과:a 문서 와 b 파일 의 시간 은 기본적으로 같다.2.실제 응용 비교,예 를 들 어 저 는 두 페이지 의 html 코드 를 동시에 캡 처 했 습 니 다.하 나 는 sohu 첫 페이지 이 고 하 나 는 sina 첫 페이지 입 니 다.두 가지 방식 으로 하 나 는 일반적인 순서 의 코드 집행,단일 스 레 드 실행,하 나 는 이곳 의 다 중 스 레 드 실행,페이지 완성 시간 비교,코드 는 다음 과 같 습 니 다:testspeed1.asp:<%startime=timer()function getHTTPPage(url)on error resume next dim http set http=Server.createobject("Msxml2.XMLHTTP")Http.open"POST",url,falseHttp.send() if Http.readystate<>4 then exit function getHTTPPage=bytes2BSTR(Http.responseBody) contents = getHTTPPageResponse.Write ""Response.Write(contents)Response.Write ""set http=nothingif err.number<>0 then err.Clear end function Function bytes2BSTR(vIn) dim strReturn dim i,ThisCharCode,NextCharCode strReturn = "" For i = 1 To LenB(vIn) ThisCharCode = AscB(MidB(vIn,i,1)) If ThisCharCode < &H80 Then strReturn = strReturn & Chr(ThisCharCode) Else NextCharCode = AscB(MidB(vIn,i+1,1)) strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) i = i + 1 End If Next bytes2BSTR = strReturn End Function getHTTPPage("http://www.sohu.com/")getHTTPPage("http://www.sina.com.cn/")%> Script Execution Time:<%=fix((timer()-startime)*1000)%>ms Testspeed2.asp: <%startime=timer()function getHTTPPage(url) on error resume next dim http set http=Server.createobject("Msxml2.XMLHTTP") Http.open "POST",url,falseHttp.send() if Http.readystate<>4 then exit function getHTTPPage=bytes2BSTR(Http.responseBody) contents = getHTTPPageResponse.Write ""Response.Write(contents)Response.Write ""set http=nothingif err.number<>0 then err.Clear end function Function bytes2BSTR(vIn) dim strReturn dim i,ThisCharCode,NextCharCode strReturn = "" For i = 1 To LenB(vIn) ThisCharCode = AscB(MidB(vIn,i,1)) If ThisCharCode < &H80 Then strReturn = strReturn & Chr(ThisCharCode) Else NextCharCode = AscB(MidB(vIn,i+1,1)) strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) i = i + 1 End If Next bytes2BSTR = strReturn End Function function runThread()dim Httpset Http=Server.createobject("Msxml2.XMLHTTP") Http.open "GET","http://127.0.0.1/thread.asp?action=b",falseHttp.send() end functionfunction a()getHTTPPage("http://www.sohu.com/")end functionfunction b()getHTTPPage("http://www.sina.com.cn/")end functionif(Request.QueryString("action")=")thenrun Thread()a()elseb()end if%>Script 실행 시간:<%=fix((timer()-startime)*1000)%>ms 실행 시간 결과:횟수 Testspeed 1 실행 시간 ms Testspeed 2.asp 운행 시간 ms 1 15593 13078 2 13343 14375 3 12828 12515 4 12437 12125 5 12109 11734 6 12281 12140 7 12703 12062 8 13468 12656 9 12328 12187 10 12343 12156 이상 10 회 는 한 페이지 가 끝 난 후에 다른 페이지 에서 실 행 됩 니 다.누가 먼저,누가 뒤에 도 마음대로.기록 이상 이 있 습 니 다.네트워크 의 원인 을 피하 기 위해 다음 5 회 테스트 주소 변경 기http://127.0.0.1 11 109,46,12,62,46,13,62,48,14,78,64,15,62,46 이상 5 회 는 한 페이지 가 끝나 면 다른 페이지 가 다시 실 행 됩 니 다.누가 먼저,누가 뒤에 도 마음대로.결과:좀 빨리 해 야 될 것 같 아.........................................................

좋은 웹페이지 즐겨찾기