11require 'openssl'
22require 'faraday'
33require 'async'
4- require 'async/barrier'
54require 'async/semaphore'
65
76OpenSSL ::SSL ::VERIFY_PEER = OpenSSL ::SSL ::VERIFY_NONE
@@ -43,33 +42,35 @@ def collect_sorted(arr)
4342SEMAPHORE_A = Async ::Semaphore . new ( 3 ) # максимум 3 одновременных запроса типа A
4443SEMAPHORE_B = Async ::Semaphore . new ( 2 ) # ма ксимум 2 одновременных запроса типа B
4544SEMAPHORE_C = Async ::Semaphore . new ( 1 ) # максимум 1 запрос типа C
46- VALID_RESULT = "0bbe9ecf251ef4131dd43e1600742cfb"
47- VALID_DURATION = 7
45+ EXPECTED_HASH = "0bbe9ecf251ef4131dd43e1600742cfb"
46+ MAX_EXECUTION_TIME = 7
4847
4948start = Time . now
5049result = Sync do
5150 ab1 = Async do
51+ b1 = SEMAPHORE_B . async { b ( 1 ) } # так как запросы B выполняются дольше (2 секунды),
52+ # их нужно запускать первыми, чтобы они начали выполняться как можно раньше
53+ # и не блокировали остальные операции в конце
5254 a11 = SEMAPHORE_A . async { a ( 11 ) }
5355 a12 = SEMAPHORE_A . async { a ( 12 ) }
5456 a13 = SEMAPHORE_A . async { a ( 13 ) }
55- b1 = SEMAPHORE_B . async { b ( 1 ) }
5657
5758 "#{ collect_sorted ( [ a11 . wait , a12 . wait , a13 . wait ] ) } -#{ b1 . wait } "
5859 end
5960
6061 ab2 = Async do
62+ b2 = SEMAPHORE_B . async { b ( 2 ) }
6163 a21 = SEMAPHORE_A . async { a ( 21 ) }
6264 a22 = SEMAPHORE_A . async { a ( 22 ) }
6365 a23 = SEMAPHORE_A . async { a ( 23 ) }
64- b2 = SEMAPHORE_B . async { b ( 2 ) }
6566 "#{ collect_sorted ( [ a21 . wait , a22 . wait , a23 . wait ] ) } -#{ b2 . wait } "
6667 end
6768
6869 ab3 = Async do
70+ b3 = SEMAPHORE_B . async { b ( 3 ) }
6971 a31 = SEMAPHORE_A . async { a ( 31 ) }
7072 a32 = SEMAPHORE_A . async { a ( 32 ) }
7173 a33 = SEMAPHORE_A . async { a ( 33 ) }
72- b3 = SEMAPHORE_B . async { b ( 3 ) }
7374 "#{ collect_sorted ( [ a31 . wait , a32 . wait , a33 . wait ] ) } -#{ b3 . wait } "
7475 end
7576
@@ -85,6 +86,6 @@ def collect_sorted(arr)
8586
8687total_time = Time . now - start
8788puts "FINISHED in #{ total_time } s."
88- puts "VALID DURATION: #{ total_time < VALID_DURATION } "
89+ puts "VALID DURATION: #{ total_time < MAX_EXECUTION_TIME } "
8990puts "RESULT = #{ result } "
90- puts "VALID: #{ result ==VALID_RESULT } "
91+ puts "VALID: #{ result ==EXPECTED_HASH } "
0 commit comments