αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantool αžŠαŸ„αž™αž”αŸ’αžšαžΎ Async, Swoole αž“αž·αž„ Parallel

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantool αžŠαŸ„αž™αž”αŸ’αžšαžΎ Async, Swoole αž“αž·αž„ Parallel

αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž’αŸαž€αžΌ PHP αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž˜αžΆαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹αž–αžΈαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Tarantool - αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ PECL αž•αŸ’αž›αžΌαžœαž€αžΆαžš tarantool/tarantool-phpαžŸαžšαžŸαŸαžšαž‡αžΆ C αž“αž·αž„ tarantool-php/αž’αžαž·αžαž·αž‡αž“αžŸαžšαžŸαŸαžšαž€αŸ’αž“αž»αž„ PHP αŸ” αžαŸ’αž‰αž»αŸ†αž‡αžΆαž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž“αŸƒαžšαžΏαž„αž€αŸ’αžšαŸ„αž™αž“αŸαŸ‡αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αŸƒαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž‘αžΆαŸ†αž„αž–αžΈαžš αž“αž·αž„αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαž·αž…αžαž½αž…αž”αŸ†αž•αž»αžαž…αŸ†αž–αŸ„αŸ‡αž€αžΌαžŠ αž’αŸ’αž“αž€αž’αžΆαž…αžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž“αžΌαžœαž€αžΆαžšαž€αžΎαž“αž‘αžΎαž„αž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž 3-5 (αž“αŸ…αž›αžΎαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžŸαŸ†αž™αŸ„αž‚!).

αžαžΎαž™αžΎαž„αž“αžΉαž„αžŸαžΆαž€αž›αŸ’αž”αž„αž’αŸ’αžœαžΈ?

αž™αžΎαž„αž“αžΉαž„αžŸαžΆαž€αž›αŸ’αž”αž„αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž”αžΆαž“αžšαŸ€αž”αžšαžΆαž”αŸ‹αžαžΆαž„αž›αžΎ αžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜ αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž’αžŸαž˜αž€αžΆαž› αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆ αž“αž·αž„αž’αžŸαž˜αž€αžΆαž›-αž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›αŸ” πŸ™‚ αž™αžΎαž„αž€αŸαž˜αž·αž“αž…αž„αŸ‹αž”αŸ‰αŸ‡αž›αŸαžαž€αžΌαžŠαžšαž”αžŸαŸ‹αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹αžαŸ’αž›αž½αž“αž―αž„αžŠαŸ‚αžšαŸ” αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž˜αžΆαž“αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž’αžΆαž…αžšαž€αž”αžΆαž“αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž“αžΌαžœαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αž„αŸ‹αž”αžΆαž“αŸ–

  • Swoole - αž€αŸ’αžšαž”αžαŸαžŽαŸ’αžŒ asynchronous αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αž–αžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ PHP αŸ” αž”αŸ’αžšαžΎαžŠαŸ„αž™αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαž™αž€αŸ’αžŸαžŠαžΌαž…αž‡αžΆ Alibaba αž“αž·αž„ Baidu αŸ” αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αŸ†αžŽαŸ‚ 4.1.0 αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžœαŸαž‘αž˜αž“αŸ’αžαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“ SwooleRuntime ::enableCoroutine()αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€ "αž”αŸ†αž”αŸ’αž›αŸ‚αž„αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž”αžŽαŸ’αžαžΆαž‰ PHP αžŠαŸ‚αž›αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž‘αŸ…αž‡αžΆαž’αžŸαž˜αž€αžΆαž›αž‡αžΆαž˜αž½αž™αž€αžΌαžŠαžαŸ‚αž˜αž½αž™αŸ”"
  • αžšαž αžΌαžαž˜αž€αžŠαž›αŸ‹αž–αŸαž›αžαŸ’αž˜αžΈαŸ—αž“αŸαŸ‡ Async αž‚αžΊαž‡αžΆαž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αžŠαŸαž‡αŸ„αž‚αž‡αŸαž™αž˜αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž„αžΆαžšαž’αžŸαž˜αž€αžΆαž›αž“αŸ…αž€αŸ’αž“αž»αž„ PHP αŸ” αž αŸαžαž»αž’αŸ’αžœαžΈαžšαž αžΌαžαž˜αž€αžŠαž›αŸ‹αž–αŸαž›αžαŸ’αž˜αžΈαŸ—αž“αŸαŸ‡? αž‡αžΆαž’αž€αž»αžŸαž› αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž αŸαžαž»αž•αž›αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αžŸαŸ’αž‚αžΆαž›αŸ‹ αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž”αžΆαž“αž›αž»αž”αžƒαŸ’αž›αžΆαŸ†αž„ αž αžΎαž™αž‡αŸ„αž‚αžœαžΆαžŸαž“αžΆαž’αž“αžΆαž‚αžαž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„αž‚αžΊαž˜αž·αž“αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αŸ” αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαžœαžΆαŸ” αž˜αž½αž™ αž–αžΈαžŸαž˜αŸ” αžŠαžΌαž… Swoole αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž“αŸ’αžαŸ‚αž˜αž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αžΎαž€αžαŸ„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αžΆαž“αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αžŠαŸƒαžŠαžΎαž˜αŸ’αž”αžΈαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αžŸαž˜αž€αžΆαž›αžŠαŸ„αž™αž‡αŸ†αž“αž½αžŸαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž“αŸƒαž€αžΆαžšαž•αŸ’αžŸαžΆαž™ TCP αž“αž·αž„ TLS αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αŸ†αžŽαŸ‚αž’αžŸαž˜αž€αžΆαž›αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ” αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαžαžΆαž˜αžšαž™αŸˆαž‡αž˜αŸ’αžšαžΎαžŸ "async.tcp = 1"αŸ”
  • αž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž› - αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αžαŸ’αž˜αžΈαžŠαŸ„αž™αž™αž»αžαŸ’αžαž·αž’αž˜αŸŒαž–αžΈ Joe Watkins αžŠαŸαž›αŸ’αž”αžΈ αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž“αŸƒαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžŠαžΌαž…αž‡αžΆ phpdbg, apcu, pthreads, pcov, uopz αŸ” αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αž•αŸ’αžαž›αŸ‹αž“αžΌαžœ API αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ multithreading αž“αŸ…αž€αŸ’αž“αž»αž„ PHP αž αžΎαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž‡αŸ†αž“αž½αžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ pthreads αŸ” αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αžŸαŸ†αžαžΆαž“αŸ‹αž“αŸƒαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž‚αžΊαžαžΆαžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ‚αž‡αžΆαž˜αž½αž™αž€αŸ†αžŽαŸ‚ ZTS (Zend Thread Safe) αž“αŸƒ PHP αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αžαžΎαž™αžΎαž„αž“αžΉαž„αž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆ?

αžαŸ„αŸ‡αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Tarantool αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αžαŸ‹αžαŸ’αžšαžΆαž‘αž»αž€αž˜αž»αž“αž”αž·αž‘ (wal_mode = αž‚αŸ’αž˜αžΆαž“) αž“αž·αž„αž€αžΆαžšαž€αžΎαž“αž‘αžΎαž„αž”αžŽαŸ’αžαžΆαž‰αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“ (readahead = 1 * 1024 * 1024) αž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΈαž˜αž½αž™αž“αžΉαž„αž›αž»αž”αž”αŸ†αž”αžΆαžαŸ‹αž€αžΆαžšαž„αžΆαžšαž‡αžΆαž˜αž½αž™αžŒαžΈαžŸ αž‘αžΈαž–αžΈαžšαž“αžΉαž„αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž’αžΆαž…αž’αžΆαž“αžŸαŸ†αžŽαžΎαž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž αžΎαž™αžŠαŸ„αž™αž αŸαžαž»αž“αŸαŸ‡αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαž αŸ…αž”αŸ’αžšαž–αŸαž“αŸ’αž’αŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ„αž›αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž‘αž·αž“αŸ’αž“αž“αŸαž™ (αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž› αž€αžΆαžšαž›αž»αž” αž€αžΆαžšαž’αžΆαž“αŸ” (αž›αŸ†αžŠαžΆαž”αŸ‹) αŸ”
αž…αž“αŸ’αž›αŸ„αŸ‡ DDL αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ–

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 tuples αž“αŸƒαž‘αž˜αŸ’αžšαž„αŸ‹

{id, "tuplΠ΅_<id>"}

Tuples αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΌαž›αž”αŸ’αžšαžΎαžŠαŸ„αž™αž”αŸ’αžšαžΎαžαž˜αŸ’αž›αŸƒαžŸαŸ„αž…αŸƒαžŠαž“αŸ’αž™αŸ”

αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžαŸ’αž›αž½αž“αžœαžΆαž‚αžΊαž‡αžΆαžŸαŸ†αžŽαžΎαžαŸ‚αž˜αž½αž™αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž· 10,000 αžŠαž„ (αž”αžŠαž·αžœαžαŸ’αžαž“αŸ) αžŠαŸ‚αž›αž“αŸ…αž€αŸ’αž“αž»αž„αžœαŸαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž˜αŸ’αžαž„αž‘αŸ€αžαŸ” αž€αžΆαžšβ€‹αž’αŸ’αžœαžΎβ€‹αžŠαžŠαŸ‚αž›αŸ—β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž’αŸ’αžœαžΎβ€‹αž‘αžΎαž„β€‹αžœαž·αž‰β€‹αžšαž αžΌαžβ€‹αž‘αžΆαž›αŸ‹β€‹αžαŸ‚β€‹αž‚αž˜αŸ’αž›αžΆαžβ€‹αž‚αŸ’αžšαž”αŸ‹β€‹αž–αŸαž›β€‹αžšαžœαžΆαž„β€‹αž€αžΆαžšβ€‹αž’αŸ’αžœαžΎβ€‹αž‘αžΎαž„β€‹αžœαž·αž‰ 5 αž‚αžΊβ€‹αžŸαŸ’αžαž·αžβ€‹αž€αŸ’αž“αž»αž„β€‹αž€αŸ†αž αž»αžŸβ€‹αžŠαŸ‚αž›β€‹αž’αžΆαž…β€‹αž‘αž‘αž½αž›β€‹αž™αž€β€‹αž”αžΆαž“ 3%*αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸαŸ‡αž›αž‘αŸ’αž’αž•αž›αž‡αžΆαž˜αž’αŸ’αž™αž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž™αž€αŸ” αž˜αžΆαž“αž€αžΆαžšαž•αŸ’αž’αžΆαž€ 1 αžœαž·αž“αžΆαž‘αžΈαžšαžœαžΆαž„αž€αžΆαžšαž’αŸ’αžœαžΎαž˜αŸ’αžαž„αž‘αŸ€αžαžŠαžΎαž˜αŸ’αž”αžΈαž€αžΆαžšαž–αžΆαžšαžαž½αžšαž€αŸ’αž”αžΆαž›αž–αžΈαž€αžΆαžšαž”αž·αž‘αž”αžΎαž€αŸ” αž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αžŸαŸ†αžšαžΆαž˜αžšαž”αžŸαŸ‹ Lua αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž·αž‘αž˜αž»αž“αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΎαž„αžœαž·αž‰αž“αžΈαž˜αž½αž™αŸ— αž αžΎαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αžαŸ†αž±αŸ’αž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžœαžΆαž”αž‰αŸ’αž…αž”αŸ‹αŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš PHP αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ‚αž‡αžΆαž˜αž½αž™αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αžŠαŸ‚αž›αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ„αž› αžŠαŸ„αž™αž˜αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž›αž‘αŸ’αž’αž•αž› αž αžΎαž™αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαž˜αžΌαž›αžŸαŸ†αžšαžΆαž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž·αž‘αŸ”

* αž…αŸ†αž“αž½αž“αž“αŸƒαž”αžŠαž·αžœαžαŸ’αžαž“αŸ αž€αžΆαžšαž’αŸ’αžœαžΎαž˜αŸ’αžαž„αž‘αŸ€αž αž“αž·αž„αž€αž˜αŸ’αžšαž·αžαž“αŸƒαž€αŸ†αž αž»αžŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‚αŸ„αž›αŸ”

αž”αžšαž·αž™αžΆαž€αžΆαžŸαžŸαžΆαž€αž›αŸ’αž”αž„

αž›αž‘αŸ’αž’αž•αž›αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„αž“αŸ…αž›αžΎ MacBookPro (2015) αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš - Fedora 30 (αž€αŸ†αžŽαŸ‚αžαžΊαžŽαŸ‚αž› 5.3.8-200.fc30.x86_64) αŸ” Tarantool αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„ docker αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš "--network host".

αž€αŸ†αžŽαŸ‚αž€αž‰αŸ’αž…αž”αŸ‹αŸ–

Tarantool: 2.3.0-115-g5ba5ed37e
DockerαŸ– 19.03.3 αž”αž„αŸ’αž€αžΎαž a872fc2f86
PHPαŸ– 7.3.11 (cli) (αž”αž„αŸ’αž€αžΎαžαŸ– αžαŸ’αž„αŸƒαž‘αžΈ 22 αžαŸ‚αžαž»αž›αžΆ αž†αŸ’αž“αžΆαŸ† 2019 αž˜αŸ‰αŸ„αž„ 08:11:04)
tarantool/αž’αžαž·αžαž·αž‡αž“αŸ– 0.6.0
rybakit/msgpack: 0.6.1
ext-tarantoolαŸ– 0.3.2 (+ αž”αŸ†αžŽαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ 7.3)*
ext-msgpackαŸ– ្.០.៣
ext-asyncαŸ– 0.3.0-8c1da46
ext-swooleαŸ– ៀ.ៀ.៑្
ext-parallelαŸ– ៑.៑.៣

* αž‡αžΆαž’αž€αž»αžŸαž› αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹αž•αŸ’αž›αžΌαžœαž€αžΆαžšαž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αŸ†αžŽαŸ‚ PHP > 7.2 αž‘αŸαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž…αž„αž€αŸ’αžšαž„ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αž“αŸ…αž›αžΎ PHP 7.3 αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎ αž”αŸ†αžŽαŸ‡.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

αžšαž”αŸ€αž”αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜

αž–αž·αž’αžΈαž€αžΆαžš Tarantool αž”αŸ’αžšαžΎαž‘αž˜αŸ’αžšαž„αŸ‹αž‚αŸ„αž›αž–αžΈαžš αž€αž‰αŸ’αž…αž”αŸ‹αžŸαžΆαžš αžŠαžΎαž˜αŸ’αž”αžΈαžαž˜αŸ’αžšαŸ€αž”αžŸαžΆαžšαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PECL αžŸαŸ€αžšαŸ€αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αžΆαž€αŸ‹αž™αŸ‰αžΆαž„αž‡αŸ’αžšαŸ…αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αž˜αŸ’αžšαŸ…αž“αŸƒαž”αžŽαŸ’αžŽαžΆαž›αŸαž™ αž αžΎαž™αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαž›αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αŸŠαž·αž“αž€αžΌαžŠαž–αžΈαž›αŸαžαž€αžΌαžŠαžαŸ†αž”αž“αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž˜αžΎαž›αž‘αŸ…αž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…. αž•αŸ’αž‘αž»αž™αž‘αŸ…αžœαž·αž‰ αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž»αž‘αŸ’αž’αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αŸŠαž·αž“αž€αžΌαžŠαžαžΆαž˜αž”αŸ†αžŽαž„ αžŠαŸ„αž™αž–αž„αŸ’αžšαžΈαž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αŸ†αž›αŸ‚αž„αž€αžΌαžŠαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš αž¬αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž•αŸ’αž‘αžΆαž›αŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž˜αžΆαž“αž§αž”αž€αžšαžŽαŸαž”αŸ†αž”αŸ’αž›αŸ‚αž„αž–αžΈαžšαžŠαŸ‚αž›αž’αžΆαž…αžšαž€αž”αžΆαž“αž…αŸαž‰αž–αžΈαž”αŸ’αžšαž’αž”αŸ‹ αž˜αž½αž™αž‚αžΊαž•αŸ’αž’αŸ‚αž€αž›αžΎ msgpack/msgpack-php (αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ MessagePack PECL αž•αŸ’αž›αžΌαžœαž€αžΆαžš) αž˜αž½αž™αž‘αŸ€αžαž‚αžΊαž”αžΎαž€ rybakit/msgpack (αž€αŸ’αž“αž»αž„ PHP αžŸαž»αž‘αŸ’αž’) αŸ”

αž˜αž»αž“αž–αŸαž›αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ αž™αžΎαž„αž“αžΉαž„αžœαžΆαžŸαŸ‹αžŸαŸ’αž‘αž„αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž’αŸŠαž·αž“αž€αžΌαžŠ MessagePack αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αž αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αž”αž„αŸ’αž αžΆαž‰αž›αž‘αŸ’αž’αž•αž›αž›αŸ’αž’αž”αŸ†αž•αž»αžαŸ–

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantool αžŠαŸ„αž™αž”αŸ’αžšαžΎ Async, Swoole αž“αž·αž„ Parallel
αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž€αŸ†αžŽαŸ‚ PHP (Pure) αž‘αžΆαž”αž‡αžΆαž„αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ PECL αž€αŸ’αž“αž»αž„αž›αŸ’αž”αžΏαž“αž€αŸαžŠαŸ„αž™ αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αž–αž·αž αžαŸ’αž‰αž»αŸ†αž“αŸ…αžαŸ‚αžŽαŸ‚αž“αžΆαŸ†αž±αŸ’αž™αž”αŸ’αžšαžΎαžœαžΆ rybakit/msgpackαž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ MessagePack αž•αŸ’αž›αžΌαžœαž€αžΆαžš αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‘αž˜αŸ’αžšαž„αŸ‹αž‚αžΊαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžαŸ‚αž•αŸ’αž“αŸ‚αž€αžαŸ’αž›αŸ‡αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ (αž§αž‘αžΆαž αžšαžŽαŸ αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αž‘αŸ αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž“αŸ„αŸ‡αž’αŸ’αž“αž€αž“αžΉαž„αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžΎαž›αŸαžαž‘αžŸαž—αžΆαž‚αž”αžΆαž“αž‘αŸ - αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αž˜αžΈαžŠαŸ‚αž›αž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αž“αŸ…αž€αŸ’αž“αž»αž„ Tarantool 2.3) αž“αž·αž„αž˜αžΆαž“ αž…αŸ†αž“αž½αž“αž’αŸ’αž“αž€αžŠαž‘αŸƒ αž”αž‰αŸ’αž αžΆ (αžšαž½αž˜αž‘αžΆαŸ†αž„αž”αž‰αŸ’αž αžΆαž—αžΆαž–αž†αž”αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ PHP 7.4) αŸ” αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹, αž‡αžΆαž‘αžΌαž‘αŸ…, αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αž˜αžΎαž›αž‘αŸ…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž”αž„αŸ‹αž…αŸ„αž›αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž…αžΌαžšαž™αžΎαž„αžœαžΆαžŸαŸ‹αžŸαŸ’αž‘αž„αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžšαž”αžŸαŸ‹αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αŸ–

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantool αžŠαŸ„αž™αž”αŸ’αžšαžΎ Async, Swoole αž“αž·αž„ Parallel
αžŠαžΌαž…αžŠαŸ‚αž›αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αž–αžΈαž€αŸ’αžšαžΆαž αŸ’αžœ αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PECL (Tarantool) αž”αž„αŸ’αž αžΆαž‰αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„αž”αžΎαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‘αŸ…αž“αžΉαž„αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP (αž’αžαž·αžαž·αž‡αž“) αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžšαžΏαž„αž‚αž½αžšαž±αŸ’αž™αž—αŸ’αž‰αžΆαž€αŸ‹αž•αŸ’αž’αžΎαž›αž“αŸ„αŸ‡αž‘αŸ αžŠαŸ„αž™αž–αŸ’αžšαŸ„αŸ‡αžαžΆ αž€αŸ’αžšαŸ„αž™αž˜αž€αž‘αŸ€αž αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‡αžΆαž—αžΆαžŸαžΆαž™αžΊαž αžœαžΆαž–αž·αžαž‡αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž˜αž»αž“αŸ– αžœαžαŸ’αžαž»αžαŸ’αž˜αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž αŸ…αž“αžΈαž˜αž½αž™αŸ—αŸ” αžŸαŸ†αžŽαžΎαžšαžŸαž»αŸ† ΠΈ αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž” (αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ - αž•αž„αžŠαŸ‚αžšαŸ” αž›αž€αŸ’αžαžŽαŸˆαžœαž·αž“αž·αž…αŸ’αž†αŸαž™αž αžΎαž™αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž’αžΆαž”αŸ‹αžŠαŸαž/αž’αžΆαž”αŸ‹αžŠαŸαž - αž”αŸ’αžšαžαž·αž”αžαŸ’αžŠαž·αž€αžΆαžš) αž’αž„αŸ’αž‚αž—αžΆαž–αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹, αž•αžΆαž€αž€αžΊ ΠΈ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ αž–αž½αž€αž‚αŸαž€αŸαž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαž•αž„αžŠαŸ‚αžšαŸ” αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αž—αžΆαž–αž”αžαŸ‹αž”αŸ‚αž“αž”αžΆαž“αž˜αž€αž€αŸ’αž“αž»αž„αžαž˜αŸ’αž›αŸƒαž˜αž½αž™αŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž‡αžΆαž‘αžΌαž‘αŸ…αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚ PHP αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αŸ’αž’αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž˜αžΆαž“αž—αžΆαž–αžαž»αžŸαž”αŸ’αž›αŸ‚αž€αž‚αŸ’αž“αžΆαž€αŸαžŠαŸ„αž™αžœαžΆαž˜αž·αž“αžŸαŸ†αžαžΆαž“αŸ‹αž‘αŸαž αžΎαž™αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžαž·αž…αž‡αžΆαž„αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎαž€αžΆαžšαž•αŸ’αž‘αž»αž€αž‡αžΆαž˜αž»αž“αž“αŸ…αž€αŸ’αž“αž»αž„ PHP 7.4 αž˜αž·αž“αž˜αŸ‚αž“αž“αž·αž™αžΆαž™αž–αžΈ JIT αž“αŸ…αž€αŸ’αž“αž»αž„ PHP 8 αž‘αŸαŸ”

αžαŸ„αŸ‡αž”αž“αŸ’αžαž‘αŸ…αž˜αž»αžαž‘αŸ€αžαŸ” Tarantool 2.0 αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ SQL αŸ” αžαŸ„αŸ‡αž–αŸ’αž™αžΆαž™αžΆαž˜αž’αž“αž»αžœαžαŸ’αžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ αž”αž‰αŸ’αž…αžΌαž› αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– αž“αž·αž„αž›αž»αž”αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αž·αž’αžΈαž€αžΆαžš SQL αž αžΎαž™αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž›αž‘αŸ’αž’αž•αž›αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž˜αž˜αžΌαž› noSQL (αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžš)αŸ–

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantool αžŠαŸ„αž™αž”αŸ’αžšαžΎ Async, Swoole αž“αž·αž„ Parallel
αž›αž‘αŸ’αž’αž•αž› SQL αž˜αž·αž“αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžαŸ’αž›αžΆαŸ†αž„αž‘αŸ (αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αžšαŸ†αž›αžΉαž€αž’αŸ’αž“αž€αžαžΆαž™αžΎαž„αž€αŸ†αž–αž»αž„αžŸαžΆαž€αž›αŸ’αž”αž„αžšαž”αŸ€αž”αžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜) αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαžαž€αž…αž·αžαŸ’αžαž…αŸ†αž–αŸ„αŸ‡αžšαžΏαž„αž“αŸαŸ‡αž˜αž»αž“αž–αŸαž›αžœαŸαž›αžΆαž‘αŸ αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš SQL αž“αŸ…αžαŸ‚αžŸαŸ’αžαž·αžαž€αŸ’αžšαŸ„αž˜αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŸαž€αž˜αŸ’αž˜ (αž§αž‘αžΆαž αžšαžŽαŸαžαŸ’αž˜αžΈαŸ—αž“αŸαŸ‡ αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ αžŸαŸαž…αž€αŸ’αžαžΈαžαŸ’αž›αŸ‚αž„αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž”αžΆαž“αžšαŸ€αž”αž…αŸ†) αž“αž·αž„αžœαž·αž“αž·αž…αŸ’αž†αŸαž™αžŠαŸ„αž™αž”αž‰αŸ’αž‡αžΈ αž”αž‰αŸ’αž αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ SQL αž“αžΉαž„αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αžΆαž–αŸαž›αž’αž“αžΆαž‚αžαŸ”

αž’αžŸαž˜αž€αžΆαž›

αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŸαžΌαž˜αž˜αžΎαž›αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ Async αž’αžΆαž…αž‡αž½αž™αž™αžΎαž„αž€αŸ‚αž›αž˜αŸ’αž’αž›αž‘αŸ’αž’αž•αž›αžαžΆαž„αž›αžΎαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž’αžŸαž˜αž€αžΆαž› αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž“αŸ’αžαŸ‚αž˜αž•αŸ’αžαž›αŸ‹αž“αžΌαžœ API αž•αŸ’αž’αŸ‚αž€αž›αžΎ coroutines αžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαŸ” αž™αžΎαž„αžšαž€αžƒαžΎαž‰αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αžαžΆαž…αŸ†αž“αž½αž“αžŠαŸαž›αŸ’αž’αž”αŸ’αžšαžŸαžΎαžšαž“αŸƒ coroutines αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αžšαž·αžŸαŸ’αžαžΆαž“αžšαž”αžŸαŸ‹αž™αžΎαž„αž‚αžΊ 25:

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantool αžŠαŸ„αž™αž”αŸ’αžšαžΎ Async, Swoole αž“αž·αž„ Parallel
"αžšαžΈαž€αžšαžΆαž›αžŠαžΆαž›" αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš 10,000 αž“αŸ…αž‘αžΌαž‘αžΆαŸ†αž„ 25 αž‘αž˜αŸ’αž›αžΆαž”αŸ‹ αž αžΎαž™αž˜αžΎαž›αžαžΆαž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„αŸ–

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantool αžŠαŸ„αž™αž”αŸ’αžšαžΎ Async, Swoole αž“αž·αž„ Parallel
αž…αŸ†αž“αž½αž“αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž€αŸ’αž“αž»αž„αž˜αž½αž™αžœαž·αž“αžΆαž‘αžΈαž”αžΆαž“αž€αžΎαž“αž‘αžΎαž„αž…αŸ’αžšαžΎαž“αž‡αžΆαž„ 3 αžŠαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ tarantool-php/αž’αžαž·αžαž·αž‡αž“!

αž‡αžΆαž’αž€αž»αžŸαž› αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PECL αž˜αž·αž“αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™ ext-async αž‘αŸαŸ”

αž…αž»αŸ‡ SQL αžœαž·αž‰?

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantool αžŠαŸ„αž™αž”αŸ’αžšαžΎ Async, Swoole αž“αž·αž„ Parallel
αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž’αžŸαž˜αž€αžΆαž›αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„αž–αž·αž’αžΈαž€αžΆαžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžš αž“αž·αž„ SQL αž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‡αžΆαž€αŸ†αž αž»αžŸαŸ”

Swoole

αž‡αžΆαžαŸ’αž˜αžΈαž˜αŸ’αžαž„αž‘αŸ€αžαž™αžΎαž„αžšαž€αžƒαžΎαž‰αž…αŸ†αž“αž½αž“αžŠαŸαž›αŸ’αž’αž”αŸ’αžšαžŸαžΎαžšαž“αŸƒ coroutines αž›αžΎαž€αž“αŸαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ SwooleαŸ–
αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantool αžŠαŸ„αž™αž”αŸ’αžšαžΎ Async, Swoole αž“αž·αž„ Parallel
αžαŸ„αŸ‡αžˆαž”αŸ‹αžαŸ’αžšαžΉαž˜αž˜αŸ‰αŸ„αž„ 25αŸ” αž…αžΌαžšαž™αžΎαž„αž“αž·αž™αžΆαž™αž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαž›αŸ’αž”αž·αž…αžŠαžΌαž…αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ Async - αž…αŸ‚αž€αž…αžΆαž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš 10,000 αžšαžœαžΆαž„ 25 coroutinesαŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αž αž™αžΎαž„αž“αžΉαž„αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αž˜αž½αž™αž‘αŸ€αž αžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αž”αŸ‚αž„αž…αŸ‚αž€αž€αžΆαžšαž„αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‡αžΆ 2 αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΈαžš (αž“αŸ„αŸ‡αž‚αžΊαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αžΈαž˜αž½αž™αŸ—αž“αžΉαž„αž’αž“αž»αžœαžαŸ’αž 5,000 αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž€αŸ’αž“αž»αž„ 25 coroutines)αŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αž”αŸ’αžšαžΎ αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Swoole.

αž›αž‘αŸ’αž’αž•αž›αŸ–

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantool αžŠαŸ„αž™αž”αŸ’αžšαžΎ Async, Swoole αž“αž·αž„ Parallel
Swole αž”αž„αŸ’αž αžΆαž‰αž›αž‘αŸ’αž’αž•αž›αž‘αžΆαž”αž‡αžΆαž„αž”αž“αŸ’αžαž·αž…αž”αžΎαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‘αŸ…αž“αžΉαž„ Async αž“αŸ…αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αž½αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš 2 αžšαžΌαž”αž—αžΆαž–αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„ (αž›αŸαž 2 αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαŸ„αž™αž…αŸƒαžŠαž“αŸ’αž™αž‘αŸ αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αžœαžΆαž‚αžΊαž‡αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš 2 αžŠαŸ‚αž›αž”αž„αŸ’αž αžΆαž‰αž›αž‘αŸ’αž’αž•αž›αž›αŸ’αž’αž”αŸ†αž•αž»αž)αŸ”

αžŠαŸ„αž™αžœαž·αž’αžΈαž“αŸαŸ‡ αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ Async αž€αŸαž˜αžΆαž“ API αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž•αž„αžŠαŸ‚αžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž”αžΆαž“αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž–αžΈαž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžŽαžΆαž˜αž½αž™αž–αžΈαž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‚αŸ„αž›αž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αž½αž™ αž¬αž…αŸ’αžšαžΎαž“αž‘αŸ (αžœαžΆαž’αžΆαž…αž‘αŸ…αžšαž½αž…αžŠαŸ‚αž›αžαžΆαžαŸ’αž‰αž»αŸ†αžšαž‰αŸ‰αŸαžšαž‰αŸ‰αŸƒαž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž˜αž½αž™)αŸ”

SQL vs binary protocol:

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantool αžŠαŸ„αž™αž”αŸ’αžšαžΎ Async, Swoole αž“αž·αž„ Parallel
αžŠαžΌαž…αž“αžΉαž„ Async αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‚αŸ„αž›αž–αžΈαžš αž“αž·αž„ SQL αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αž…αŸ„αž›αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž’αžŸαž˜αž€αžΆαž›αŸ”

αž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›

αžŠαŸ„αž™αžŸαžΆαžšαž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ Parallel αž˜αž·αž“αž˜αŸ‚αž“αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈ coroutines αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ†αž–αžΈ threads αž…αžΌαžšαžœαžΆαžŸαŸ‹αž…αŸ†αž“αž½αž“αžŠαŸαž›αŸ’αž’αž”αŸ’αžšαžŸαžΎαžšαž“αŸƒ threads αž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›αŸ–

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantool αžŠαŸ„αž™αž”αŸ’αžšαžΎ Async, Swoole αž“αž·αž„ Parallel
αžœαžΆαž‚αžΊ 16 αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αŸ” αžαŸ„αŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹αž“αŸ…αž›αžΎ 16 αžαŸ’αžŸαŸ‚αž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›αŸ–

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantool αžŠαŸ„αž™αž”αŸ’αžšαžΎ Async, Swoole αž“αž·αž„ Parallel
αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰ αž›αž‘αŸ’αž’αž•αž›αž‚αžΊαž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αž’αžŸαž˜αž€αžΆαž› (αž˜αž·αž“αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž…αžΌαž› Swoole αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš 2)αŸ” αž…αŸ†αžŽαžΆαŸ†αžαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PECL αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαž αž“αž·αž„αž’αžΆαž”αŸ‹αžŠαŸαžαž‚αžΊαž‘αž‘αŸαŸ” αž“αŸαŸ‡αž‚αžΊαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž”αžΆαž“αž”αžšαžΆαž‡αŸαž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αŸ†αž αž»αžŸαž˜αž½αž™ - αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αžŠαžΉαž„αžαžΆαžαžΎαžœαžΆαž‡αžΆαž€αŸ†αž αž»αžŸαž“αŸƒ ext-parallel, ext-tarantool αž¬αž‘αžΆαŸ†αž„αž–αžΈαžšαŸ”

αž₯αž‘αžΌαžœαž™αžΎαž„αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž SQLαŸ–

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantool αžŠαŸ„αž™αž”αŸ’αžšαžΎ Async, Swoole αž“αž·αž„ Parallel
αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž—αžΆαž–αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž€αŸ’αžšαžΆαž αŸ’αžœαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆ?

αžšαž½αž˜αž‚αŸ’αž“αžΆ

αž αžΎαž™αž…αž»αž„αž€αŸ’αžšαŸ„αž™ αžŸαžΌαž˜αžŸαž„αŸ’αžαŸαž”αž›αž‘αŸ’αž’αž•αž›αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αŸ’αžšαžΆαž αŸ’αžœαž˜αž½αž™ αžŠαžΎαž˜αŸ’αž”αžΈαž˜αžΎαž›αžšαžΌαž”αž—αžΆαž–αžšαž½αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αžŠαŸ‚αž›αž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„αŸ” αžŸαžΌαž˜αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αžαŸ’αž˜αžΈαž˜αž½αž™αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž™αžΎαž„αž˜αž·αž“αž‘αžΆαž“αŸ‹αž”αžΆαž“αž’αŸ’αžœαžΎαž“αŸ…αž‘αžΎαž™ αž™αžΎαž„αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Async coroutines αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎ Parallel*αŸ” αž‚αŸ†αž“αž·αžαž“αŸƒαž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αžαžΆαž„αž›αžΎαž‚αžΊαž˜αžΆαž“αžšαž½αž…αž αžΎαž™ αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž—αžΆαž€αŸ’αžŸαžΆ αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž―αž€αž—αžΆαž–αž‚αŸ’αž“αžΆαž‘αŸ αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαžœαžΆαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αŸ”

* αžœαžΆαž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Swoole coroutines αž‡αžΆαž˜αž½αž™ Parallel αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžαžΆαž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž˜αž·αž“αž†αž”αž‚αŸ’αž“αžΆαŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž›αž‘αŸ’αž’αž•αž›αž…αž»αž„αž€αŸ’αžšαŸ„αž™αŸ–

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ PHP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Tarantool αžŠαŸ„αž™αž”αŸ’αžšαžΎ Async, Swoole αž“αž·αž„ Parallel

αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“αž˜αž½αž™

αžαžΆαž˜αž‚αŸ†αž“αž·αžαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αž›αž‘αŸ’αž’αž•αž›αž”αžΆαž“αž”αŸ’αžšαŸ‚αž‘αŸ…αž‡αžΆαžŸαž€αŸ’αžαž·αžŸαž˜ αž αžΎαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž αŸαžαž»αž•αž›αž˜αž½αž™αž…αŸ†αž“αž½αž“αžαŸ’αž‰αž»αŸ†αž”αŸ’αžšαžΆαž€αžŠαžαžΆαž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αž‘αŸ! αž˜αž·αž“αžαžΆαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ‚αžαŸ’αž›αž½αž“αž’αŸ’αž“αž€αž‘αŸ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž“αž·αž™αžΆαž™αžαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ† αžœαžΆαž‡αžΆαž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžœαžΆαž™αžαž˜αŸ’αž›αŸƒαžαžΆαžαžΎαž’αŸ’αž“αž€αž’αžΆαž… "αž…αŸ’αžšαž”αžΆαž…αŸ‹" αž…αŸαž‰αž–αžΈαž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹ TCP αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžαž·αžαžαŸ†αž”αŸ’αžšαžΉαž„αž”αŸ’αžšαŸ‚αž„αžαž·αž…αžαž½αž…αž”αŸ†αž•αž»αžαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αžΆαž“αž‚αŸ†αž“αž·αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžšαžΈαž€αžšαžΆαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αž·αž…αžΆαžšαžŽαžΆαžŸαŸ†αžŽαžΎαžšαž‘αžΆαž‰αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž›αŸαžαž€αžΌαžŠαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† αž“αž·αž„αž›αž‘αŸ’αž’αž•αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αžŠαŸ„αž™αž‘αŸ‚αž€ αžƒαŸ’αž›αžΆαŸ†αž„.

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹