闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤濠€閬嶅焵椤掑倹鍤€閻庢凹鍙冨畷宕囧鐎c劋姹楅梺鍦劋閸ㄥ綊宕愰悙鐑樺仭婵犲﹤鍟扮粻鑽も偓娈垮枟婵炲﹪寮崘顔肩<婵炴垶鑹鹃獮鍫熶繆閻愵亜鈧倝宕㈡禒瀣瀭闁割煈鍋嗛々鍙夌節闂堟侗鍎愰柣鎾存礃缁绘盯宕卞Δ鍐唺缂備胶濮垫繛濠囧蓟瀹ュ牜妾ㄩ梺鍛婃尰閻熝呭垝鐠囧樊鍚嬪璺猴功閿涚喖姊绘笟鍥у闁告娲熷畷鍫曨敆婢跺娅栨繝鐢靛Т閿曘倝骞婇幇鐗堝€垮┑鍌氭啞閻撶喖骞栭幖顓炵仯缂佸鏁婚弻娑氣偓锝傛櫇閸斿秶绱掗崒姘毙㈡顏冨嵆瀹曞ジ鎮㈤崫鍕闂傚倷绀侀幉锟犲礉閹达箑绀夌€光偓閸曨偆鍔﹀銈嗗笒閸婂綊寮抽渚囨闁绘劘灏欑粻濠氭煕閳轰礁顏€规洘枪椤﹀绱掗悩瀹犲妞ゎ亜鍟存俊鍫曞幢濡も偓椤洭姊虹粙鍖℃敾婵炶尙鍠庨锝夊箹娴e摜顓哄┑鐘亾閸ㄥ綊鏌婇敐鍛殾闁诡垶鍋婂顏堟⒒婵犲骸澧婚柛鎾跺枛瀵鎮㈢喊杈ㄦ櫓闂佷紮绲介張顒勫闯閺夋娓婚柕鍫濆暙閻忣亝淇婇銏犳殭闁伙絿鍏橀幃銏ゆ偂楠烆兘鏅犻弻鏇熷緞閸績鍋撻弴鈶哄顫濋懜鐢靛幗闂佺粯鏌ㄩ幗婊堟儗婵犲嫮纾肩紓浣姑ù顔锯偓瑙勬礃瀹€鎼佺嵁閹烘绠婚柛鎾茶兌濡插洦绻濆▓鍨灍闁挎洍鏅犲畷婊冣槈閵忊晜鏅e┑鐐叉▕娴滄繈鍩涢幋锔界厵缂佸鐏濋銏ゆ煟閹惧崬鍔﹂柡灞剧☉铻i柤濮愬€楅悡澶愭倵鐟欏嫭绀冮柛銊ユ健閻涱喖螣閼测晝锛滃┑鈽嗗灣缁垶鎮甸弽顓熲拻濞撴埃鍋撻柍褜鍓涢崑娑㈡嚐椤栨稒娅犻柟缁㈠枟閻撴瑦銇勯弴妤€浜剧紓浣哄У閻楃姴顕i锕€绠荤紓浣姑禍褰掓⒑閼测斁鎷¢柛鎿勭畵瀹曘儳鈧綆鍋傜换鍡涙煟閹板吀绨婚柍褜鍓氶悧鏇$亱婵炶揪缍€椤宕h箛娑欑厪闁割偅绻嶅Ο鍫ユ煛娴i潻韬柡宀嬬節瀹曞爼濡烽妷褌鐥梻浣瑰▕閺€杈╂暜閹烘绠掗梻浣瑰缁诲倿骞婅箛娑樼疅闁告縿鍎崇壕鐓庮熆鐠洪缚瀚伴柛鏂款儏鑿愰柛銉戝秷鍚銈冨灪濞茬喐鎱ㄩ埀顒勬煃閵夈儱甯犳繛锝庡櫍濮婄粯鎷呯粵瀣異闂佸摜濮靛畝绋跨暦閹达箑围濠㈣泛锕ラ悗顒勬⒑閸涘﹤濮﹂柛鐘崇墱婢规洟宕楅崗鐓庡伎濠碘槅鍨板ḿ锟犲传濞差亝鐓熼柟鍨缁夘喗鎱ㄦ繝鍕笡闁瑰嘲鎳樺畷顐﹀Ψ椤喓鍔岄埞鎴﹀煡閸℃ぞ绨诲┑鐐点€嬬换婵嬬嵁閸愵喗鍊烽柣鎴炆戝▍鍥⒑缁嬫寧婀扮紒瀣灦缁傚秴螖閸涱喒鎷洪梻鍌氱墛娓氭危閹绢喗鐓涢柛娑卞枤閻帡鏌熼鍡欑瘈闁诡喓鍨藉畷妤呮嚃閳轰礁绠伴梻鍌欑劍閹爼宕曢鈧鎻掆槈濞嗘埈娴勫┑鐘诧工閻楀﹪鎮¢崘顏呭枑婵犲﹤鐗嗙粈鍫熺箾閸℃鐛滈柤鏉挎健濮婃椽顢楅埀顒傜矓閹绢喗鍊块柛顭戝亖娴滄粓鏌熼崫鍕ラ柛蹇撶焸閺屾盯鎮㈤崫銉ュ绩闂佸搫鐬奸崰鏍х暦濞嗘挸围闁糕剝顨忔导锟�     濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌涘☉姗堟敾闁告瑥绻橀弻锝夊箣閿濆棭妫勯梺鍝勵儎缁舵岸寮诲☉妯锋婵鐗婇弫楣冩⒑閸涘﹦鎳冪紒缁橈耿瀵鏁愭径濠庢綂闂佺粯锚濡﹤螞瀹€鍕拺閺夌偞澹嗛ˇ锕傛煥閺囥劋閭€殿喖顭烽崹楣冨箛娴e憡鍊梺纭呭亹鐞涖儵鍩€椤掆偓绾绢參顢欓幇鐗堚拻闁稿本鑹鹃埀顒佹倐瀹曟垿宕卞☉妯虹€梻渚囧墮缁夊瓨顢婇梻浣告啞濞诧箓宕规导鏉戠闁逞屽墴濮婃椽妫冨ù銈嗙洴瀹曘劑顢涘顒傜憿缂傚倸鍊搁崐鎼佸磹瀹勬噴褰掑炊閳哄啰顦╂繛鏉戝悑濞兼瑧澹曠憴鍕瘈闂傚牊渚楅崕蹇涙煢閸愵亜鏋涢柡灞诲妼閳规垿宕遍埡鍌傃囨⒑閸濆嫭鍣洪柣鎿勭節瀵鈽夊Ο閿嬵潔闂佸憡顨堥崑鐐烘倶瀹ュ鈷戦柛锔诲幖閸樻潙霉濠婂啰鍩f鐐插暙铻栭柛鎰ㄦ櫅閺嬪倿姊洪崨濠冨闁告挻鐩棟闁靛ň鏅滈埛鎴犵磽娴h偂鎴﹀箚閸垻纾肩紓浣贯缚缁犳挻銇勯弴顏嗙ɑ缂佺粯绻傞~婵嬵敇閻愭壆鐩庨梻浣藉吹閸嬬偟绮欓崼銉ョ劦妞ゆ巻鍋撻柛妯荤墬缁旂喖寮撮悙鈺傛杸闂佺粯鍔栧ḿ娆撴倶閿斿浜滈煫鍥ч瀹撳棙顨ラ悙宸剶闁轰礁鍟撮崺鈧い鎺戝€搁ˉ姘舵煕瑜庨〃鍡涙偂濞戙垺鐓曢柕澶堝灪濞呭懘鏌$€n偅鈷掔紒杈ㄥ浮閹晠鎳¢妶鍥ㄦ瘒闂備礁鎼惉濂稿窗閹捐鐒垫い鎺嶈兌閳洖鐣濋敐鍛仴妤犵偛锕畷姗€顢欓悾灞藉箺闂傚⿴鍋勫ú銈夋晝閵夈儮鏋嶅┑鐘叉处閻撴稓鈧厜鍋撻悗锝庡墰琚︽俊銈囧Х閸嬬偛鐜婚崸妤€鐒垫い鎺戝濞懷囨煙鐠囇呯瘈鐎规洘鑹鹃埥澶愬閳锯偓閹锋椽姊洪崨濠勭畵閻庢凹鍘奸敃銏″鐎涙ḿ鍘介梺鍐叉惈閿曘倝鎮橀敃鍌涚厽婵炴垵宕▍宥団偓瑙勬礀閻栧ジ銆佸Δ鍛劦妞ゆ帒鍊婚惌鍡涙煕瀹€鈧崑鐐烘偂閺囩喓绡€闂傚牊绋戦鈺呮煕閺冣偓缁捇寮婚敓鐘插窛妞ゆ挻绮屾禒顔尖攽椤旂》鍔熺紒顕呭灦楠炲繘宕ㄧ€涙ɑ鍎梺鑽ゅ枑婢瑰棝顢曟總鍛娾拻濞达絿鍎ら崵鈧梺纭咁嚋缁绘繈鐛崘顔肩<闁绘劦浜栭崑鎾寸瑹閳ь剙顕f禒瀣╅柕澹懐宓佹繝鐢靛Х閺佸憡鎱ㄧ€电硶鍋撳☉鎺撴珖缂佽京鍋為幆鏃堝煢閳ь剟寮ㄦ禒瀣厽闁归偊鍓欑痪褔鏌嶇紒妯荤闂囧绻濇繝鍌氼伀闁活厽甯楅〃銉╂倷閺夋垹浼岄梺纭呮珪缁捇骞冨▎鎾寸劵婵炴垶姘ㄥ▔鍧楁⒒閸屾瑦绁版い顐㈩槸閻e嘲螣鐞涒剝鐏冨┑鐐村灦閻熝囥€呴柨瀣瘈濠电姴鍊搁弳濠囨煛閳ь剚绂掔€n偆鍘撻梺瀹犳〃缁€渚€寮抽悙鐑樼厪闁搞儯鍔庣粻鏍煙娓氬灝濡界紒缁樼箞瀹曘劑顢氶崨顒€鎽嬮梻鍌欒兌閹虫挸顕i崼鏇炵闁告劘灏欓弳锕傛煟閺冨倵鎷¢柡浣告喘閺岋綁寮崑鍐茬秺瀵煡骞栨担鍏夋嫼闁荤姴娲ゅ鍫曞船婢跺浜滄い鎰╁焺濡叉悂鎮¢妶澶嬬厽闁哄倹宕橀懡锛勭磽閸屾稒鐨戦柟鍙夋倐瀵噣宕煎☉鎺戜壕濞达絽澹婂ḿ鈺呮偣鏉炴壆绉块柕濞炬櫆閻撱儵鏌¢崒姘变虎闁抽攱妫冮弻锝夋晝閳ь剟鎮ч幘鎰佹綎婵炲樊浜滅粻褰掓煟閹邦厼绲诲┑顔肩焸濮婃椽宕ㄦ繝鍐弳缂備礁顦伴幐鎶藉春閵忕媭鍚嬪璺衡看濞煎﹪姊洪棃娑氬婵☆偄鐭傞獮蹇撁洪鍛幗闂佺粯锚閸樻牠鎳滈鍫熺厱闁哄倽鍎荤€氫即鏌嶇拠鑼ф鐐叉喘閹囧醇閵忕姴绠ラ梻鍌欑閹诧繝宕归鐐茬9闁哄稁鍋€閸嬫挸顫濋悙顒€顏�

45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:怎么样通过asp实现多线程?

怎么样通过asp实现多线程?

2016-09-03 17:47:26 来源:www.45fan.com 【

怎么样通过asp实现多线程?

看了大白菜芯写的php实现多线程,一时间觉得有用,就改了个asp版的。。呵呵,这里感谢他的思路!(http://blog.csdn.net/wapweb/archive/2004/08/16/76319.aspx

1.原理实验

原理当然都一样,利用web服务器支持多线程,在同一页面里向服务器发多个http请求来完成我们的工作。更详细的分析,看大白菜芯写的吧。php里用Socket,asp当然用封装好了的xmlhttp了。

还是先实验一下,在一个页面里同时写2txt文件,比较写入时间的差异。代码如下:

<%

startime=timer()

''----------asp实现多线程----------''

function runThread()

dim Http

set Http=Server.createobject("Msxml2.XMLHTTP")

Http.open "GET","http://127.0.0.1/thread.asp?action=b",false

Http.send()

end function

function a()

dim Content,FilePath,MyFile

Content=now()&chr(30)&timer()

FilePath=server.MapPath("a.txt")

Set fso = CreateObject("Scripting.FileSystemObject")

Set MyFile = fso.CreateTextFile(FilePath, True)

MyFile.Write(Content)

MyFile.Close

end function

function b()

dim Content,FilePath,MyFile

Content=now()&chr(30)&timer()

FilePath=server.MapPath("b.txt")

Set fso = CreateObject("Scripting.FileSystemObject")

Set MyFile = fso.CreateTextFile(FilePath, True)

MyFile.Write(Content)

MyFile.Close

end function

if(Request.QueryString("action")="") then

runThread()

a()

else

b()

end if

%>

Script Execution Time:<%=fix((timer()-startime)*1000)%>ms

运行后的结果显示:

a文件和b文件中的时间是基本相同的。

2.实际应用比较

比如我同时抓取2个页面的html代码,一个sohu首页,一个是sina首页,用2种方式:一个是常规的顺序的代码执行,单线程执行,一个是这里的多线程执行,比较页面完成时间,代码如下:

testspeed1.asp:

<%

startime=timer()

function getHTTPPage(url)

on error resume next

dim http

set http=Server.createobject("Msxml2.XMLHTTP")

Http.open "POST",url,false

Http.send()

if Http.readystate<>4 then exit function

getHTTPPage=bytes2BSTR(Http.responseBody)

contents = getHTTPPage

Response.Write "<xmp>"

Response.Write(contents)

Response.Write "</xmp>"

set http=nothing

if 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,false

Http.send()

if Http.readystate<>4 then exit function

getHTTPPage=bytes2BSTR(Http.responseBody)

contents = getHTTPPage

Response.Write "<xmp>"

Response.Write(contents)

Response.Write "</xmp>"

set http=nothing

if 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 Http

set Http=Server.createobject("Msxml2.XMLHTTP")

Http.open "GET","http://127.0.0.1/thread.asp?action=b",false

Http.send()

end function

function a()

getHTTPPage("http://www.sohu.com/")

end function

function b()

getHTTPPage("http://www.sina.com.cn/")

end function

if(Request.QueryString("action")="") then

runThread()

a()

else

b()

end if

%>

Script Execution Time:<%=fix((timer()-startime)*1000)%>ms

运行的时间结果:

 

次数

Testspeed1运行时间ms

Testspeed2.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次是一个页面完后另一个页面再执行的。谁先谁后也是任意的。

结果:好象是要快一点哦。。。。。。。。。。。

附录:阿泰兄发布了一个《XMLHTTP批量抓取远程资料》,打算和他说说,修改成这个思路的,发布出来,估计要等一下了。

 

本文地址:http://www.45fan.com/a/question/71827.html
Tags: 实现 asp XMLHTTP
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部