Skip to content

Commit de92a1e

Browse files
committed
added async
1 parent be41568 commit de92a1e

File tree

1 file changed

+50
-38
lines changed

1 file changed

+50
-38
lines changed

client.rb

Lines changed: 50 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
require 'openssl'
22
require 'faraday'
3+
require 'async'
4+
require 'async/barrier'
5+
require 'async/semaphore'
36

47
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
58

@@ -36,43 +39,52 @@ def collect_sorted(arr)
3639
arr.sort.join('-')
3740
end
3841

39-
start = Time.now
40-
41-
a11 = a(11)
42-
a12 = a(12)
43-
a13 = a(13)
44-
b1 = b(1)
45-
46-
ab1 = "#{collect_sorted([a11, a12, a13])}-#{b1}"
47-
puts "AB1 = #{ab1}"
48-
49-
c1 = c(ab1)
50-
puts "C1 = #{c1}"
51-
52-
a21 = a(21)
53-
a22 = a(22)
54-
a23 = a(23)
55-
b2 = b(2)
56-
57-
ab2 = "#{collect_sorted([a21, a22, a23])}-#{b2}"
58-
puts "AB2 = #{ab2}"
42+
# Создаём семафоры для ограничения параллельных запросов
43+
SEMAPHORE_A = Async::Semaphore.new(3) # максимум 3 одновременных запроса типа A
44+
SEMAPHORE_B = Async::Semaphore.new(2) # ма ксимум 2 одновременных запроса типа B
45+
SEMAPHORE_C = Async::Semaphore.new(1) # максимум 1 запрос типа C
46+
VALID_RESULT = "0bbe9ecf251ef4131dd43e1600742cfb"
47+
VALID_DURATION = 7
5948

60-
c2 = c(ab2)
61-
puts "C2 = #{c2}"
62-
63-
a31 = a(31)
64-
a32 = a(32)
65-
a33 = a(33)
66-
b3 = b(3)
67-
68-
ab3 = "#{collect_sorted([a31, a32, a33])}-#{b3}"
69-
puts "AB3 = #{ab3}"
70-
71-
c3 = c(ab3)
72-
puts "C3 = #{c3}"
73-
74-
c123 = collect_sorted([c1, c2, c3])
75-
result = a(c123)
49+
start = Time.now
50+
result = Sync do
51+
ab1 = Async do
52+
a11 = SEMAPHORE_A.async{ a(11) }
53+
a12 = SEMAPHORE_A.async{ a(12) }
54+
a13 = SEMAPHORE_A.async{ a(13) }
55+
b1 = SEMAPHORE_B.async{ b(1) }
56+
57+
"#{collect_sorted([a11.wait, a12.wait, a13.wait])}-#{b1.wait}"
58+
end
59+
60+
ab2 = Async do
61+
a21 = SEMAPHORE_A.async{ a(21) }
62+
a22 = SEMAPHORE_A.async{ a(22) }
63+
a23 = SEMAPHORE_A.async{ a(23) }
64+
b2 = SEMAPHORE_B.async{ b(2) }
65+
"#{collect_sorted([a21.wait, a22.wait, a23.wait])}-#{b2.wait}"
66+
end
67+
68+
ab3 = Async do
69+
a31 = SEMAPHORE_A.async{ a(31) }
70+
a32 = SEMAPHORE_A.async{ a(32) }
71+
a33 = SEMAPHORE_A.async{ a(33) }
72+
b3 = SEMAPHORE_B.async{ b(3) }
73+
"#{collect_sorted([a31.wait, a32.wait, a33.wait])}-#{b3.wait}"
74+
end
75+
76+
c123 = Async do
77+
c1 = SEMAPHORE_C.async{ c(ab1.wait) }
78+
c2 = SEMAPHORE_C.async{ c(ab2.wait) }
79+
c3 = SEMAPHORE_C.async{ c(ab3.wait) }
80+
collect_sorted([c1.wait, c2.wait, c3.wait])
81+
end.wait
82+
83+
a(c123)
84+
end
7685

77-
puts "FINISHED in #{Time.now - start}s."
78-
puts "RESULT = #{result}" # 0bbe9ecf251ef4131dd43e1600742cfb
86+
total_time = Time.now - start
87+
puts "FINISHED in #{total_time}s."
88+
puts "VALID DURATION: #{total_time < VALID_DURATION}"
89+
puts "RESULT = #{result}"
90+
puts "VALID: #{result==VALID_RESULT}"

0 commit comments

Comments
 (0)