Async, Swoole рдФрд░ Parallel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд▓рд┐рдП PHP рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛

Async, Swoole рдФрд░ Parallel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд▓рд┐рдП PHP рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛

PHP рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЯрд╛рд░рдирдЯреВрд▓ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдХрдиреЗрдХреНрдЯрд░ рд╣реИрдВ - рдпрд╣ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ PECL рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИ рдЯрд╛рд░рдирдЯреВрд▓/рдЯрд╛рд░рдирдЯреВрд▓-php, рд╕реА рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рдФрд░ рдЯрд╛рд░рдирдЯреВрд▓-рдкреАрдПрдЪрдкреА/рдХреНрд▓рд╛рдЗрдВрдЯ, PHP рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдмрд╛рдж рдХрд╛ рд▓реЗрдЦрдХ рд╣реВрдВред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдФрд░ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ, рдХреЛрдб рдореЗрдВ рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде, рдЖрдк 3-5 рдкреНрд░рджрд░реНрд╢рди рд╡реГрджреНрдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░!).

рд╣рдо рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗ?

рд╣рдо рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗ рдПрдХ рд╕рдордп рдХрд╛ рдХрдиреЗрдХреНрдЯрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ, рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ, рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ-рд╕рдорд╛рдирд╛рдВрддрд░ рд░реВрдк рд╕реЗ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред ЁЯЩВ рд╣рдо рд╕реНрд╡рдпрдВ рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЗ рдХреЛрдб рдХреЛ рднреА рдирд╣реАрдВ рдЫреВрдирд╛ рдЪрд╛рд╣рддреЗред рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:

  • рдЭрдкрдЯреНрдЯрд╛ рдорд╛рд░рдирд╛ - PHP рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдврд╛рдВрдЪрд╛ред рдЕрд▓реАрдмрд╛рдмрд╛ рдФрд░ Baidu рдЬреИрд╕реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рджрд┐рдЧреНрдЧрдЬреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрд╕реНрдХрд░рдг 4.1.0 рдХреЗ рдмрд╛рдж рд╕реЗ рдПрдХ рдЬрд╛рджреБрдИ рд╡рд┐рдзрд┐ рд╕рд╛рдордиреЗ рдЖрдИ рд╣реИ SwooleRuntime::enableCoroutine(), рдЬреЛ рдЖрдкрдХреЛ "рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░реЛрдирд╕ PHP рдиреЗрдЯрд╡рд░реНрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред"
  • Async рд╣рд╛рд▓ рддрдХ PHP рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдЖрд╢рд╛рдЬрдирдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдерд╛ред рд╣рд╛рд▓ рддрдХ рдХреНрдпреЛрдВ? рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдг рд╕реЗ, рд▓реЗрдЦрдХ рдиреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рднрд╡рд┐рд╖реНрдп рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдПрдХ рд░ рдХрд╛рдВрдЯреЗ рд╕реЗ. рд╕реНрд╡реВрд▓реЗ рдХреА рддрд░рд╣, рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЖрдкрдХреЛ рдЯреАрд╕реАрдкреА рдФрд░ рдЯреАрдПрд▓рдПрд╕ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЙрдирдХреЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдиреА рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд▓рд╛рдИ рдХреЗ рдЭрдЯрдХреЗ рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреА рдкреИрдВрдЯ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ "async.tcp = 1"ред
  • рд╕рдорд╛рдирд╛рдВрддрд░ - phpdbg, apcu, pthreads, pcov, uopz рдЬреИрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓реЗрдЦрдХ, рдкреНрд░рд╕рд┐рджреНрдз рдЬреЛ рд╡реЙрдЯрдХрд┐рдВрд╕ рдХрд╛ рдПрдХ рдмрд┐рд▓реНрдХреБрд▓ рдирдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░ред рдПрдХреНрд╕рдЯреЗрдВрд╢рди PHP рдореЗрдВ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ pthreads рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реАрдорд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ PHP рдХреЗ ZTS (рдЬрд╝реЗрдВрдб рдереНрд░реЗрдб рд╕реЗрдл) рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИред

рд╣рдо рдХреИрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗ?

рдЖрдЗрдП рд░рд╛рдЗрдЯ-рдлрд╝реЙрд░рд╡рд░реНрдб рд▓реЙрдЧрд┐рдВрдЧ рдЕрдХреНрд╖рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЯрд╛рд░рдирдЯреВрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ (wal_mode = рдХреЛрдИ рдирд╣реАрдВ) рдФрд░ рдмрдврд╝рд╛ рд╣реБрдЖ рдиреЗрдЯрд╡рд░реНрдХ рдмрдлрд╝рд░ (рдЖрдЧреЗ рдкрдврд╝реЗрдВ = 1 * 1024 * 1024). рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдбрд┐рд╕реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдЧрд╛, рджреВрд╕рд░рд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдмрдлрд░ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджреЗрдЧрд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░ рджреЗрдЧрд╛ред

рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЬреЛ рдбреЗрдЯрд╛ (рд╕рдореНрдорд┐рд▓рди, рд╡рд┐рд▓реЛрдкрди, рдкрдврд╝рдирд╛ рдЗрддреНрдпрд╛рджрд┐) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдореЗрдореНрдЯреЗрдХреНрд╕ рд╕реНрдкреЗрд╕ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдкреБрдирдГ), рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХ рд╕реВрдЪрдХрд╛рдВрдХ рдорд╛рди рдСрд░реНрдбрд░ рдХрд┐рдП рдЧрдП рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рдиреЛрдВ рдХреЗ рдЬрдирд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред тАЛ(рдХреНрд░рдо).
рд╕реНрдкреЗрд╕ рдбреАрдбреАрдПрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

space = box.schema.space.create(config.space_name, {id = config.space_id, temporary = true})
space:create_index('primary', {type = 'tree', parts = {1, 'unsigned'}, sequence = true})
space:format({{name = 'id', type = 'unsigned'}, {name = 'name', type = 'string', is_nullable = false}})

рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдерд╛рди рдХреЛ рдлреЙрд░реНрдо рдХреЗ 10,000 рдЯреБрдкрд▓реНрд╕ рд╕реЗ рднрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

{id, "tupl╨╡_<id>"}

рдЯреБрдкрд▓реНрд╕ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреБрдВрдЬреА рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реНрд╡рдпрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдЕрдиреБрд░реЛрдз рд╣реИ, рдЬрд┐рд╕реЗ 10,000 рдмрд╛рд░ (рдХреНрд░рд╛рдВрддрд┐рдпрд╛рдБ) рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рддрдм рддрдХ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ 5 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рднреА рд╕рдордп рд╡рд┐рдЪрд▓рди 3%* рдХреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рддреНрд░реБрдЯрд┐ рдХреЗ рднреАрддрд░ рди рд╣реЛ рдЬрд╛рдПрдВред рдЗрд╕рдХреЗ рдмрд╛рдж рдФрд╕рдд рдкрд░рд┐рдгрд╛рдо рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ. рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдереНрд░реЙрдЯрд▓рд┐рдВрдЧ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ 1 рд╕реЗрдХрдВрдб рдХрд╛ рдард╣рд░рд╛рд╡ рд╣реЛрддрд╛ рд╣реИред рд▓реБрдЖ рдХрд╛ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред PHP рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд╡рд▓ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░рд┐рдВрдЧ рд╕рдХреНрд╖рдо рдФрд░ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдЕрдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИред

* рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдХреНрд░рд╛рдВрддрд┐рдпреЛрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реАрдорд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг

рдиреАрдЪреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо MacBookPro (2015), рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо - Fedora 30 (рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг 5.3.8-200.fc30.x86_64) рдкрд░ рдмрдирд╛рдП рдЧрдП рдереЗред рдЯрд╛рд░рдирдЯреВрд▓ рдХреЛ рдбреЙрдХрд░ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ "--network host".

рдкреИрдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг:

Tarantool: 2.3.0-115-g5ba5ed37e
рдбреЙрдХрд░: 19.03.3, рдмрд┐рд▓реНрдб a872fc2f86
PHP: 7.3.11 (рд╕реАрдПрд▓рдЖрдИ) (рдирд┐рд░реНрдорд┐рдд: 22 рдЕрдХреНрдЯреВрдмрд░ 2019 08:11:04)
рдЯрд╛рд░рдирдЯреВрд▓/рдХреНрд▓рд╛рдЗрдВрдЯ: 0.6.0
рд░рдпрдмрд╛рдХрд┐рдЯ/рдПрдордПрд╕рдЬреАрдкреИрдХ: 0.6.1
рдПрдХреНрд╕рдЯ-рдЯрд╛рд░рдирдЯреВрд▓: 0.3.2 (+7.3 рдХреЗ рд▓рд┐рдП рдкреИрдЪ)*
ext-msgpack: 2.0.3
ext-async: 0.3.0-8c1da46
рдПрдХреНрд╕рдЯ-рд╕реНрд╡реВрд▓: 4.4.12
рд╡рд┐рд╕реНрддрд╛рд░-рд╕рдорд╛рдирд╛рдВрддрд░: 1.1.3

* рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХрдиреЗрдХреНрдЯрд░ PHP рд╕рдВрд╕реНрдХрд░рдг > 7.2 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред PHP 7.3 рдкрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдкреИрдмрдВрдж.

рдирд┐рд╖реНрдХрд░реНрд╖

рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдб

рдЯрд╛рд░рдирдЯреВрд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдПрдХ рдмрд╛рдЗрдирд░реА рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдореИрд╕реЗрдЬрдкреИрдХ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП. рдкреАрдИрд╕реАрдПрд▓ рдХрдиреЗрдХреНрдЯрд░ рдореЗрдВ, рдХреНрд░рдорд╛рдВрдХрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпреВрдЬрд░рд▓реИрдВрдб рдХреЛрдб рд╕реЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ. рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рд╢реБрджреНрдз PHP рдХрдиреЗрдХреНрдЯрд░, рдорд╛рдирдХ рдПрдирдХреЛрдбрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ рдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рджреЛ рдПрдирдХреЛрдбрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдПрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рд╕рдВрджреЗрд╢рдкреИрдХ/msgpack-php (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдореИрд╕реЗрдЬрдкреИрдХ рдкреАрдИрд╕реАрдПрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди), тАЛтАЛрджреВрд╕рд░рд╛ рдЪрд╛рд▓реВ рд╣реИ рд░рдпрдмрдХрд┐рдЯ/рд╕рдВрджреЗрд╢рдкреИрдХ (рд╢реБрджреНрдз PHP рдореЗрдВ)ред

рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо PHP рдХрдиреЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдореИрд╕реЗрдЬрдкреИрдХ рдПрдиреНрдХреЛрдбрд░реНрд╕ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рдкреЗрдВрдЧреЗ рдФрд░ рдЖрдЧреЗ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╣рдо рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╕рд░реНрд╡реЛрддреНрддрдо рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдПрдЧрд╛:

Async, Swoole рдФрд░ Parallel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд▓рд┐рдП PHP рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛
рд╣рд╛рд▓рд╛рдБрдХрд┐ PHP рд╕рдВрд╕реНрдХрд░рдг (рд╢реБрджреНрдз) рдЧрддрд┐ рдореЗрдВ PECL рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рдХрдорддрд░ рд╣реИ, рдлрд┐рд░ рднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ рд░рдпрдмрдХрд┐рдЯ/рд╕рдВрджреЗрд╢рдкреИрдХ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдореИрд╕реЗрдЬрдкреИрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдкреНрд░рд╛рд░реВрдк рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗрд╡рд▓ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдЖрдк рджрд╢рдорд▓рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ - рдЯрд╛рд░рдирдЯреВрд▓ 2.3 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдирдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░) рдФрд░ рдПрдХ рд╣реИ рджреВрд╕рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ ╨┐╤А╨╛╨▒╨╗╨╡╨╝ (PHP 7.4 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕рд╣рд┐рдд)ред рдЦреИрд░, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░рд┐рддреНрдпрдХреНрдд рджрд┐рдЦрддреА рд╣реИред

рддреЛ, рдЖрдЗрдП рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдб рдореЗрдВ рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рдкреЗрдВ:

Async, Swoole рдФрд░ Parallel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд▓рд┐рдП PHP рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛
рдЬреИрд╕рд╛ рдХрд┐ рдЧреНрд░рд╛рдлрд╝ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, PECL рдХрдиреЗрдХреНрдЯрд░ (рдЯрд╛рд░рдирдЯреВрд▓) PHP рдХрдиреЗрдХреНрдЯрд░ (рдХреНрд▓рд╛рдЗрдВрдЯ) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рджрд┐рдЦрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз, рдзреАрдореА рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ рдирд┐рд╡реЗрджрди ╨╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ (рдЪрдпрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рдорд╛рдкрджрдВрдб, рдФрд░ рдЕрдкрдбреЗрдЯ/рдЕрдкрд╕рд░реНрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ - рд╕рдВрдЪрд╛рд▓рди), рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдерд╛рдПрдБ рд╕рдВрдмрдВрдз, рдкреИрдХрд░ ╨╕ рд╕рдВрдЪрд╛рд▓рдХ рд╡реЗ рдЙрдкрд░рд┐рд╡реНрдпрдп рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд▓рдЪреАрд▓рд╛рдкрди рдПрдХ рдХреАрдордд рдкрд░ рдЖрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, PHP рджреБрднрд╛рд╖рд┐рдпрд╛ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдПрдХ рдЕрдВрддрд░ рд╣реИ, рдпрд╣ рдорд╣рддреНрд╡рд╣реАрди рд╣реИ рдФрд░, рд╢рд╛рдпрдж, PHP 7.4 рдореЗрдВ рдкреНрд░реАрд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдФрд░ рднреА рдХрдо рд╣реЛрдЧрд╛, PHP 8 рдореЗрдВ JIT рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдЯрд╛рд░рдирдЯреВрд▓ 2.0 рдиреЗ SQL рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ред рдЖрдЗрдП SQL рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрд▓реЗрдХреНрдЯ, рдЗрдВрд╕рд░реНрдЯ, рдЕрдкрдбреЗрдЯ рдФрд░ рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ noSQL (рдмрд╛рдЗрдирд░реА) рд╕рдордХрдХреНрд╖реЛрдВ рд╕реЗ рдХрд░реЗрдВ:

Async, Swoole рдФрд░ Parallel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд▓рд┐рдП PHP рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛
SQL рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдирд╣реАрдВ рд╣реИрдВ (рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рд╣рдо рдЕрднреА рднреА рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реЛрдКрдВрдЧрд╛; SQL рд╕рдорд░реНрдерди рдЕрднреА рднреА рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзреАрди рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛) рддреИрдпрд╛рд░ рдмрдпрд╛рди) рдФрд░, рд╕реВрдЪреА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдореБрджреНрджреЛрдВ, SQL рдЗрдВрдЬрди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрдИ рдЕрдиреБрдХреВрд▓рди рд╕реЗ рдЧреБрдЬрд░реЗрдЧрд╛ред

async

рдЦреИрд░, рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ Async рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛрд░рдЖрдЙрдЯреНрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдордиреЗ рдЕрдиреБрднрд╡рдЬрдиреНрдп рд░реВрдк рд╕реЗ рдкрд╛рдпрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрд░рдЖрдЙрдЯреНрд╕ рдХреА рдЗрд╖реНрдЯрддрдо рд╕рдВрдЦреНрдпрд╛ 25 рд╣реИ:

Async, Swoole рдФрд░ Parallel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд▓рд┐рдП PHP рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛
10,000 рдХреЛрд░рдЯрд╛рдЗрдиреЛрдВ рдореЗрдВ 25 рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ "рдлреИрд▓рд╛рдПрдБ" рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:

Async, Swoole рдФрд░ Parallel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд▓рд┐рдП PHP рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛
рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ 3 рдЧреБрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рдмрдврд╝ рдЧрдИ рдЯрд╛рд░рдирдЯреВрд▓-рдкреАрдПрдЪрдкреА/рдХреНрд▓рд╛рдЗрдВрдЯ!

рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдкреАрдИрд╕реАрдПрд▓ рдХрдиреЗрдХреНрдЯрд░ ext-async рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рд╣реБрдЖред

рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

Async, Swoole рдФрд░ Parallel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд▓рд┐рдП PHP рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдб рдореЗрдВ рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рддреНрд░реБрдЯрд┐ рдХреА рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд╣реЛ рдЧрдпрд╛ред

рдЭрдкрдЯреНрдЯрд╛ рдорд╛рд░рдирд╛

рдлрд┐рд░ рд╕реЗ рд╣рдо рд╕реНрд╡реВрд▓реЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдмрд╛рд░ рдХреЛрд░рдЯрд╛рдЗрди рдХреА рдЗрд╖реНрдЯрддрдо рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ:
Async, Swoole рдФрд░ Parallel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд▓рд┐рдП PHP рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛
рдЖрдЗрдП 25 рдкрд░ рд░реБрдХреЗрдВред рдЖрдЗрдП Async рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдЙрд╕реА рдЪрд╛рд▓ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ - 10,000 рдХреЙрд░рдЖрдЙрдЯреНрд╕ рдХреЗ рдмреАрдЪ 25 рдСрдкрд░реЗрд╢рди рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдПрдХ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ 2 рджреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВрдЧреЗ (рдЕрд░реНрдерд╛рдд, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ 5,000 рдХреЛрд░рдЖрдЙрдЯреНрд╕ рдореЗрдВ 25 рдСрдкрд░реЗрд╢рди рдХрд░реЗрдЧреА)ред рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдмрдирд╛рдИ рдЬрд╛рдПрдВрдЧреА рд╕реНрд╡реВрд▓реЗрдкреНрд░реЛрд╕реЗрд╕.

рдкрд░рд┐рдгрд╛рдо:

Async, Swoole рдФрд░ Parallel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд▓рд┐рдП PHP рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛
рд╕реНрд╡реЛрд▓ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдкрд░ рдПрд╕рд┐рдВрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдо рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 2 рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рддрд╕реНрд╡реАрд░ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ (рдирдВрдмрд░ 2 рдХреЛ рд╕рдВрдпреЛрдЧ рд╕реЗ рдирд╣реАрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛; рдореЗрд░реА рдорд╢реАрди рдкрд░, рдпрд╣ 2 рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдереАрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдпрд╛)ред

рд╡реИрд╕реЗ, Async рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рднреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рдореБрдЭреЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдХреЛрдИ рдЕрдВрддрд░ рдирдЬрд░ рдирд╣реАрдВ рдЖрдпрд╛ (рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣реАрдВ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджреА рд╣реЛ)ред

SQL рдмрдирд╛рдо рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓:

Async, Swoole рдФрд░ Parallel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд▓рд┐рдП PHP рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛
Async рдХреА рддрд░рд╣, рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдб рдореЗрдВ рдмрд╛рдЗрдирд░реА рдФрд░ SQL рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдорд╛рдирд╛рдВрддрд░

рдЪреВрдВрдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЙрд░рдЖрдЙрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдЖрдЗрдП рд╕рдорд╛рдирд╛рдВрддрд░ рдереНрд░реЗрдбреНрд╕ рдХреА рдЗрд╖реНрдЯрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдорд╛рдкреЗрдВ:

Async, Swoole рдФрд░ Parallel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд▓рд┐рдП PHP рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛
рдпрд╣ рдореЗрд░реА рдорд╢реАрди рдкрд░ 16 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЖрдЗрдП 16 рд╕рдорд╛рдирд╛рдВрддрд░ рдзрд╛рдЧреЛрдВ рдкрд░ рдХрдиреЗрдХреНрдЯрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд▓рд╛рдПрдВ:

Async, Swoole рдФрд░ Parallel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд▓рд┐рдП PHP рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдо рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (2 рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╕реНрд╡реВрд▓реЗ рдХреА рдЧрд┐рдирддреА рдирд╣реАрдВ) рд╕реЗ рднреА рдмреЗрд╣рддрд░ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреАрдИрд╕реАрдПрд▓ рдХрдиреЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП, рдЕрдкрдбреЗрдЯ рдФрд░ рдЕрдкрд╕рд░реНрдЯ рдСрдкрд░реЗрд╢рди рдЦрд╛рд▓реА рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпреЗ рдСрдкрд░реЗрд╢рди рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдП - рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдПрдХреНрд╕рдЯ-рдкреИрд░реЗрд▓рд▓, рдПрдХреНрд╕рдЯ-рдЯрд╛рд░рдирдЯреВрд▓, рдпрд╛ рджреЛрдиреЛрдВ рдХреА рдЧрд▓рддреА рдереАред

рдЕрдм рдЖрдЗрдП SQL рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:

Async, Swoole рдФрд░ Parallel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд▓рд┐рдП PHP рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛
рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирддрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ?

рдПрдХ рд╕рд╛рде

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЖрдЗрдП рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рд╕рдордЧреНрд░ рддрд╕реНрд╡реАрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХ рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░реЗрдВред рдЖрдЗрдП рдЪрд╛рд░реНрдЯ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдирдпрд╛ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рд╣рдордиреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ - рдЖрдЗрдП рд╕рдорд╛рдирд╛рдВрддрд░* рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Async coroutines рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓рд╛рдПрдВред рдЙрдкрд░реЛрдХреНрдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ рдЪрд░реНрдЪрд╛ рдХреА рд▓реЗрдЦрдХ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдЖрдо рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рдмрди рдкрд╛рдИ, рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

* рд╕реНрд╡реВрд▓реЗ рдХреЛрд░рдЖрдЙрдЯрд┐рдВрд╕ рдХреЛ рдкреИрд░реЗрд▓рд▓ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛; рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЕрд╕рдВрдЧрдд рд╣реИрдВред

рддреЛ, рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо:

Async, Swoole рдФрд░ Parallel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рд░рдирдЯреВрд▓ рдХреЗ рд▓рд┐рдП PHP рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдирд╛

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреА

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлреА рдЕрдЪреНрдЫреЗ рдирд┐рдХрд▓реЗ, рдФрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИ! рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд▓рд┐рдП рддрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рдпреЛрдЧ рдерд╛ рдЬреЛ рдЖрдкрдХреЛ рдпрд╣ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрдЯрд░ рд╕реЗ рдХрд┐рддрдирд╛ "рдирд┐рдЪреЛрдбрд╝" рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЖрдкрдХреЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рд▓реЙрдиреНрдЪ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдХреЛрдб рдПрдХ рдЕрд▓рдЧ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ рдЦрдЬрд╛рдиреЗ.

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ