rendered paste body<cfscript> variables.sites = { yahoo = "http://www.yahoo.com/", msn = "http://www.msn.com/", google = "http://www.google.com/", live = "http://www.live.com/", wikipedia = "http://en.wikipedia.org/wiki/Main_Page", microsoft = "http://www.microsoft.com/en/us/default.aspx", facebook = "http://www.facebook.com/" }; </cfscript><cftimer label="No threading" type="outline"> <cfloop collection="#variables.sites#" item="site"> <cfhttp url="#variables.sites[site]#" /> <cfoutput> <pre>[#len(cfhttp.fileContent)#] #site#</pre> </cfoutput> <cfflush /> </cfloop></cftimer><cftimer label="Threading: Join All" type="outline"> <cfset threadList = "" /> <cfloop collection="#variables.sites#" item="site"> <cfset threadList = listAppend(threadList, site & "_joinAll") /> <cfthread name="#site#_joinAll" action="run" url="#variables.sites[site]#"> <cfhttp url="#url#" /> <cfoutput>#len(cfhttp.fileContent)#</cfoutput> </cfthread> </cfloop> <cfthread action="join" name="#threadList#" /> <cfloop collection="#variables.sites#" item="site"> <cfoutput> <pre>[#trim(evaluate(site & "_joinAll.output"))#] #site#</pre> </cfoutput> <cfflush /> </cfloop></cftimer><cftimer label="Threading: Async Join" type="outline"> <cfset variables.runningThreads = "" /> <cfset variables.finishedThreads = "" /> <cfloop collection="#variables.sites#" item="site"> <cfset variables.runningThreads = listAppend(variables.runningThreads, site) /> <cfthread name="#site#" action="run" url="#variables.sites[site]#"> <cfhttp url="#url#" /> <cfoutput>#len(cfhttp.fileContent)#</cfoutput> <cfset variables.finishedThreads = listAppend(variables.finishedThreads, thread.name) /> <cfset variables.runningThreads = listDeleteAt(variables.runningThreads, listFind(variables.runningThreads, thread.name)) /> </cfthread> </cfloop> <cfloop condition="listLen(variables.runningThreads) GT 0 OR listLen(variables.finishedThreads) GT 0"> <cfloop list="#variables.finishedThreads#" index="i"> <cfthread action="join" name="#listFirst(variables.finishedThreads)#" /> <cfoutput> <pre>[#trim(evaluate(listFirst(variables.finishedThreads) & ".output"))#] #listFirst(variables.finishedThreads)#</pre> </cfoutput> <cfflush /> <cfset variables.finishedThreads = listDeleteAt(variables.finishedThreads, 1) /> </cfloop> </cfloop></cftimer>