1
1
require 'openssl'
2
2
require 'faraday'
3
3
require 'async'
4
- require 'async/barrier'
5
4
require 'async/semaphore'
6
5
7
6
OpenSSL ::SSL ::VERIFY_PEER = OpenSSL ::SSL ::VERIFY_NONE
@@ -43,33 +42,35 @@ def collect_sorted(arr)
43
42
SEMAPHORE_A = Async ::Semaphore . new ( 3 ) # максимум 3 одновременных запроса типа A
44
43
SEMAPHORE_B = Async ::Semaphore . new ( 2 ) # ма ксимум 2 одновременных запроса типа B
45
44
SEMAPHORE_C = Async ::Semaphore . new ( 1 ) # максимум 1 запрос типа C
46
- VALID_RESULT = "0bbe9ecf251ef4131dd43e1600742cfb"
47
- VALID_DURATION = 7
45
+ EXPECTED_HASH = "0bbe9ecf251ef4131dd43e1600742cfb"
46
+ MAX_EXECUTION_TIME = 7
48
47
49
48
start = Time . now
50
49
result = Sync do
51
50
ab1 = Async do
51
+ b1 = SEMAPHORE_B . async { b ( 1 ) } # так как запросы B выполняются дольше (2 секунды),
52
+ # их нужно запускать первыми, чтобы они начали выполняться как можно раньше
53
+ # и не блокировали остальные операции в конце
52
54
a11 = SEMAPHORE_A . async { a ( 11 ) }
53
55
a12 = SEMAPHORE_A . async { a ( 12 ) }
54
56
a13 = SEMAPHORE_A . async { a ( 13 ) }
55
- b1 = SEMAPHORE_B . async { b ( 1 ) }
56
57
57
58
"#{ collect_sorted ( [ a11 . wait , a12 . wait , a13 . wait ] ) } -#{ b1 . wait } "
58
59
end
59
60
60
61
ab2 = Async do
62
+ b2 = SEMAPHORE_B . async { b ( 2 ) }
61
63
a21 = SEMAPHORE_A . async { a ( 21 ) }
62
64
a22 = SEMAPHORE_A . async { a ( 22 ) }
63
65
a23 = SEMAPHORE_A . async { a ( 23 ) }
64
- b2 = SEMAPHORE_B . async { b ( 2 ) }
65
66
"#{ collect_sorted ( [ a21 . wait , a22 . wait , a23 . wait ] ) } -#{ b2 . wait } "
66
67
end
67
68
68
69
ab3 = Async do
70
+ b3 = SEMAPHORE_B . async { b ( 3 ) }
69
71
a31 = SEMAPHORE_A . async { a ( 31 ) }
70
72
a32 = SEMAPHORE_A . async { a ( 32 ) }
71
73
a33 = SEMAPHORE_A . async { a ( 33 ) }
72
- b3 = SEMAPHORE_B . async { b ( 3 ) }
73
74
"#{ collect_sorted ( [ a31 . wait , a32 . wait , a33 . wait ] ) } -#{ b3 . wait } "
74
75
end
75
76
@@ -85,6 +86,6 @@ def collect_sorted(arr)
85
86
86
87
total_time = Time . now - start
87
88
puts "FINISHED in #{ total_time } s."
88
- puts "VALID DURATION: #{ total_time < VALID_DURATION } "
89
+ puts "VALID DURATION: #{ total_time < MAX_EXECUTION_TIME } "
89
90
puts "RESULT = #{ result } "
90
- puts "VALID: #{ result ==VALID_RESULT } "
91
+ puts "VALID: #{ result ==EXPECTED_HASH } "
0 commit comments