File: benchmark.rb

package info (click to toggle)
ruby-async-http 0.59.5-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid
  • size: 572 kB
  • sloc: ruby: 4,164; javascript: 40; makefile: 4
file content (78 lines) | stat: -rwxr-xr-x 1,240 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env ruby

require 'benchmark'

require 'httpx'

require 'async'
require 'async/barrier'
require 'async/semaphore'
require 'async/http/internet'

URL = "https://www.codeotaku.com/index"
REPEATS = 10

Benchmark.bmbm do |x|
	x.report("async-http") do
		Async do
			internet = Async::HTTP::Internet.new
			
			i = 0
			while i < REPEATS
				response = internet.get(URL)
				response.read
				
				i += 1
			end
		ensure
			internet&.close
		end
	end
	
	x.report("async-http (pipelined)") do
		Async do |task|
			internet = Async::HTTP::Internet.new
			semaphore = Async::Semaphore.new(100, parent: task)
			barrier = Async::Barrier.new(parent: semaphore)
			
			# Warm up the connection pool...
			response = internet.get(URL)
			response.read
			
			i = 0
			while i < REPEATS
				barrier.async do
					response = internet.get(URL)
					
					response.read
				end
				
				i += 1
			end
			
			barrier.wait
		ensure
			internet&.close
		end
	end
	
	x.report("httpx") do
		i = 0
		while i < REPEATS
			response = HTTPX.get(URL)
			
			response.read
			
			i += 1
		end
	end
	
	x.report("httpx (pipelined)") do
		urls = [URL] * REPEATS
		responses = HTTPX.get(*urls)
		
		responses.each do |response|
			response.read
		end
	end
end