ááá˘áŤ
áá
áá ááᣠá áĽááááá á GopherCon Russia 2019 á ááľáŽ áĽá á áŠá˛áŤá á ááá ááááŽáľ áľáĽá°áŁ áá á°áĽáťááᢠáĽá¨á°ááááá áŤááá áľá á˘áľáá áá¨á á áá áá - á¨á˘-áá áŤáá° á¨á°ááᰠᣠáá áĽáá á áľá°áłá˝ á áá°ááᢠáááŤáľá˘
á¨á˘áľáá á˘áá´ááľ áĽáá´áľ áĽáá°áá°áŤ ᣠá¨á°áťá á áááá áľ áá ᣠââá¨ááá˝ á˘áá´ááśá˝ á¨á¨á á áááá áľ áá áĽá á áá ááłáŽá˝ áá á¨áĽááą á¨á áá ááŁá áĽáá°áá áĽáááá¨áłáá ᢠá¨áľááš áłáá á˛á˘á¤áá¤áľ ááľááá á¨á˘áľáá á˘áá´ááśá˝ áĽááłáá¸á áĽáá; á á ááľáĽ á¨áŤáłá˝áá áááťá áĽááááᢠáĽá "ááŁááááľ" á¨áŤáłá˝áá áĽá á á áŁá ááŁá á¨áá áአá¨ááἠááł áááá á ááá á¨áá á¤á°-ááťáááľá áĽáá ááááá˘
áĽáŤááź ááĽááľá á áá áĽá á áľá°áłá˝ áĽáá˛áá á áĽáááľ á°áľá á á°ááááᢠááľ!
ááá˘áŤ
á°áá ááá˝áá! áá˝áľ áľáľáľáľ á°ááľ á˛áá ááá˝áá á áŁá á°ááááᢠáľá á á°ááş á¨ááἠááł áá¨á á áá ááľá ááłáĽ áááááá áĽáŠ áá áá, á áá°á? á áá¨ááᣠáĽáá áĽá áĽá፠áááľ á¨áááť áŽáľ ááľáá ááá¨ááᢠđ
ááá áááśá˝ áá° áá ᣠáááŁá á áá¨á á¨á°áá áá ᣠáĽá áĽá áá á¨áááᢠáľááá
áĽááááá˘
áᏠáľááá¨á°ááľ áááŽá˝ áĽáááŤáá.
- á˘áá´ááśá˝ áááľá áá¸á;
- á¨á˘áľáá áá¨á á áá áááľá áá;
- á¨áľ áĽá á áá áĽáá°ááá áĽá áĽá á áá á¨ááááá áľ áĽá ááá;
- á Go ááľáĽ ááá á á°ááŁá á áĽá á¨á áááŁáŁáŞá áá áľáá˝ áľáá;
- á áá á áŤáá° áááᣠááá áá á Go assembler ááľáĽ á áŁá áá¤áłá á á°ááŁá á;
- á¨á˘áľáá á˘áá´ááśá˝ "á˝ááŽá˝";
- ááŁá á á°ááŁá á.
áľááá á˘áá´ááśá˝ áááľá áá¸á?
áá¨á á ááá á¨ááá áá¨á á á°á¨á᪠á¨ááá áĽáá áĽá á¨áááááá á¨á°áᨠá¨ááἠááá
á ááᢠááááá áááá á áĽá
á áá áááá. á˘áá´ááśá˝ á¨áá áááá áááĄá áá á áá áááá áá ááá (áá áľáŤá á¨ááŁá áá°áľ) áĽá áá
áá°áľ á¨ááľáá á áááŞáá ááľáĽáľáĽááľ á ááᢠááá áá á¨ááἠááłáá˝ áĽááá áá á¨áá°á áá á áŤáá ááἠáááá áĽá á¨ááľáá ááľáĽáľáĽááľ á áŁá áááá ááᢠá ááłáĽ á°á¨áᣠáááŞáá ááá áá á ááľ áĽáááááá˘
áá áĽá á á áŁá á¨á°ááłá°á áááľ ááᣠá áľáá áĽá á áááľ áááἠá¨á°ááᣠáá áá áľáá° á ááłáľ á¨áá á¨ááἠááł áááľ áĽá áááá á¨á°ááá¨áľáŠ á ááᣠá¨ááἠááł á˘áá´ááśá˝á áááá á á á°áá áĽá á áá á¨áá áĽááľ á ááŤá¨áŚá˝ áĽáť áĽááłá ááááá ááá°á ááá˘
á¨ááááŞáŤá á ááŤá¨áĽ á¨ááá áŚáłá á á°áá¨áľ ááááľ, á¨ááá áŚáłáá áá° áľááá˝ áááá˝ áá¨ááá áá.
áĽááá áá áá áá á¨á°ááŤáŠ ááá˝á á áá áá áĽáá°áŤáá. á ááľ ááłá á á°ááŤáŠ áááśá˝ á¨á°á¨ááá áľááá˝ áłáĽáá˝á á¨áŤá á áá°áá°áŞáŤá ááľáĽ áŤá áľáá á¨ááłááľ áłáĽá ááᢠááłááľ á¨ááá ááááŁáľ "áŠáŞáá˝" á¨ááá ááá "ááłááśá˝" á ááá áłáĽá ááľáĽ áááá áááá á áá°á?
ááá°áá á ááŤá¨áĽ á¨áááááá á áŤá ááá á¨áĄáľá á áŁááľá áá˛áŤáá ááá¨áĽ áá. áá
áá á áá˝ áŤááłáá˝ ááá á á°ááá˘áŚá˝ á˘áá´ááśá˝ ááľáĽ áĽáá°áááá. áá˝ áŤááłáá˝á áá áá á¨ááłáá ááłá áá á áŁá á°ááłáłá ááᣠááá áá á áłáĽáá˝ áłáĽá ááľáᣠá áá áłáĽáá ááľáĽ á¨áá¨á¨áť áĽááá˝ áŤááľ áľááá˝ áłáĽáá˝ á áááľá˘
áŚáľá°áá á ááŤá¨áĽ á¨ááá ááááľá ááľáááľ áá. áá
áá á¨ááá°áŤá Bloom filters ááá cuckoo ááŁáŞáŤáá˝á á áá áá ááᢠá¨ááááŞáŤááš áá˛áŤáá áááľ áá°áŁá, á¨áááá áŤáľáááłá.
á¨áá¨á¨áťá á ááŤá¨áĽ áááá áááľáá á¨áá°á áá ááá á áá áá á áá áá áá áá. á á˘áľáá á˘áá´ááśá˝ ááľáĽ á¨ááá°ááá áá
ááᢠá áᣠáĽááąá áľáá áá á ááłááľ áá áááá áá¨á á áá ááľáĽ ááá á ááĽáᣠááá áá áĽá
á á áŁá á áĽááľ áĽáá°áááááá˘
áĽááłááŠáľ á¨ááἠááł á˘áá´ááśá˝ áááľ á°á áĽá á áľááááľ á¨á°áá ááᢠáá áááľ á ááłááľ áá áĽá á ááŤá¨áŚá˝á á á°ááłáłá áá áá áá áĽáá˝áááᥠááááá á¨á áá ááá á á¨áááá ááá áááá ááá á¨áá˝á á¨ááá á áááśá˝á áá¸áá áŤááĽáá˘
áᏠáľá áĽááá á áŁá áłááá á ááŤá¨áĽ áĽáááŤáá - á¨á˘áľáá á˘áá´ááśá˝á˘
á áá áááľ áá áĽá áá áá á¨áááá¨á?
áŁáą áá á áĄáľá á᪠áá áá á¨áá°áŤá (ááááŁáľ á áá° áŁááĽá á¨á°áŁááá áá áááłá˝áá á á°áἠáłáááá
)ᢠá á áá ááŞáŤ ᨠ400 áááŽá á áá á°á áááá˝ áĽá ááĽááą ááἠá°ááá
á¨áááᥠáĽá áŁá
áŞáŤáľ á áá. áá
áá á¨ááá°ááá á¨á˘áľáá á˘áá´ááśá˝á á¨áᎠáĽá á áááááśá˝á á áá áá ááá˘
áľááá á¨á˘áľáá áá¨á á áá áááľá áá?
á¨á˘áľáá á˘áá´ááśá˝áŁ áľá áĽáá°ááŤáááá°áᣠá¨ááá á˘áá´ááľá ááá°áá á á˘áľáá ááá á˘áľá´áśá˝á áá ááᢠá áá á á¨á áĽááłáŁ áá
á˘áá´ááľ áááá¸áá á áŤááľ (áĽáá° á°áá˝ áŤá) áĽá ááĽá¨áśáťá¸áá ááá áá¤áśá˝á (ááľáᣠá¨á áá áááᣠááá°) á¨áááá á ááľ ááá á¨á፠á áá á˘áľááá˝ áĽá á˘áľ áŚááŹá˝áá˝á (áĽáᣠáááᣠááľ) á áá áá áľáá°-ááá áááᢠ) á¨ááá áĽáŤááá áááááľ.
á áĽá áá
á°á áŤáá˛ááᲠáááśá˝ ("á¨ááá ááá" ááá "á¨ááĽáť áááłá" áĽá áĽáá° "á¨á¨á°áá ááá áŤáá áááľ" á¨áááľá ááá áá á áľáĄ) ááááá˝ á áááŠá áľ áá á¨á˘áľáá á˘áá´ááśá˝ á áŁá á°áľáá áĽá á áŁá áá¤áłá áĽáá°áá á°áááŽááᢠáá á áá á áłááťáá áá¨áá°á áŤáá˛ááᲠá ááśá˝ áĽáá˛á á áĽáŠ áááł áĽáá°áá°áŠá˘
á áŁá áááá á¨á˘áľáá áá¨á á ááá áĽáááá¨áľá˘
áĽáá°áá
áŤá áááľáŽá˝ ááĽá¨áśá˝ áŤáá¸á á¨ááľáŽ ááἠá¤áśá˝ áááá áĽááłáá á áľáĽá˘
- á ááľáŽ á á áŤá˘áŤ;
- á¨áá ááá፠á á;
- á á¨ááł á á (á á¨ááł á áá);
- á á¨á´á ááŤá áá˝áá (á¨á°áŤá áŚáłáá˝á ááá áá);
- ááŹáá´áŞáŤáá˝ (áŞáá á°áľáá);
- ááľ (ááľ)á˘
ááĽáŤááłááą ááἠá¤áľ ᨠ0 ááᎠá°á¨áłáłá ááĽá áĽááľáĽ áĽá áá
á°á¨ áľááľáłá á 6 á˘áľáá (ááĽáŤááłááą áŁá
᪠á ááľ) áĽáááľáĽá˘ á¨ááŤá áŹáľáśáŤááą áá
ááĽá¨áľ á áá ááá á¨ááá á ááá áá á áááľá¨áľ áĽááá
á á˘áľáá áĽáááááᢠáŹáľáśáŤááľ 4 á á¨ááł áŤááᣠá " has a veranda" ááľáĽ áŤáá á˘áľ 4 á˘áľáá áá° 1 áááá áŤá (áŹáŤááł á¨ááᣠá¨ááŤá áá° 0)á˘
á áá á áŁá ááá á¨á˘áľáá áá¨á á áá á áá áĽá áĽáá°áá¨á°ááľ áŤá áĽáŤááá˝á áááááľ ááá ááá áľ áĽáá˝ááááĄ-
- "ááŹáá´áŞáŤá á°áľáá á¨áá ááἠá¤áśá˝á á áłá¨á";
- "á á¨á´á á¨ááľááá áľ á á¨ááł áŤáá ááŤá˝ ááἠá¤áśá˝á á áłá¨á"
áĽáá´áľ? áĽáľá˛ áĽáááá¨áľá˘ á¨ááááŞáŤá áĽáŤá á áŁá ááá áá. áĽá ááľá¨á áŤááĽá á¨"áŹáá´áŞáŤá ááłáá" á˘áľááá ááľá°á ááłá¸á áá°á°ááᥠáŹáľáśáŤááśá˝ áááá ááá¨á ááá˘
ááá°áá áĽáŤá áľáá˝ ááľáĽáľáĽ áá. ááľ áŤááá áŹáľáśáŤááśá˝á áááá áááááľ âNOT bitmapâ á ááá âááľâ á˘áľáá áá áá áá á ááĽáᣠá ááá á áĽá âá á¨á´á ááľáŤá áĽá˝áááâ á ááá á˘áľáá áĽá áá¤áąá âáŹáŤááł á áâ á¨ááá á˘áľáá ááᢠá¨á°ááá á˘áľáá áááá ááľáááśáťá˝áá á¨ááŤáá á°áááľá áááá ááááᢠá áá
ááłáᣠáá
á¨áŠááľáľ ááἠá¤áľ áĽáť ááá˘
áĽá ááľá-ááłáĽ á á ᣠáá á áá¨áá ᣠáŽáąá á á
áᥠáĽááŤááá˘
á¨á˘áľáá á˘áá´ááśá˝ á¨áľ áĽá á áá áááá?
ááá á¨á˘áľáá á˘áá´ááśá˝ á¨ááá˝áᣠ90% á¨ááááľ áááśá˝ á¨Oracle DB áá á á ááľá áá á áá ááááľ ááááłáᢠáá ááá˝ á˛á˘á¤áá¤áľáá˝ ááááŁáľ áĽáá˛á
ááááąá áĽáŠ ááá áá°ááá ᣠá áá°á? áĽáááł á áá°áá.
áá áá á°á ááŁáŞáá˝á áááá áĽáááá¨áľá˘
MySQL áá á¨á˘áľáá á˘áá´ááśá˝á á áá°áááᣠááá áá áá
áá á ááŤá ááá¨áá á¨áá áá ááŽááá á á (
PostgreSQL á¨á˘áľáá á˘áá´ááśá˝á á áá°áááᣠááá áá á¨ááá áá¤áśá˝á á á ááŤáł ááá˝ á˘áá´ááśá˝ áá áááŁáá ááá á˘áľáá áĽá á˘áľ áŚááŹá˝áá˝á áá áááá˘
Tarantool á¨á˘áľá´áľ á˘áá´ááśá˝ á ááľ áĽá ááá ááááá˝á á áĽááą áá áá°áááá˘
áŹá˛áľ ááá á¨á˘áľ ááłáá˝ á ááľ
MongoDB áá á¨á˘áľáá á˘áá´ááśá˝á á áá°áááᣠááá áá áá
á ááŤá áĽáá˛áłá¨á á¨áá áá ááŽáááá á áá˘
Elasticsearch á˘áľáááľá á ááľáĽ á áŠá áá ááá
- áá á á˛áľ áá¨á¤áłá˝á á á¤áłá˝á áłá¨áĄ- áááłá˘ áá á Go ááľáĽ á¨á°áťá á á˛áľ áááááľ á¨ááá á¨ááἠááł ááᢠá ááľáĄ á¨á˘áľáá á˘áá´ááśá˝á áĽáť áááá áĽá áááá ááá á áĽááą áá ááá°á¨áłáᢠáľáá˝ ááá°á áĽáááááŤáá.
á Go ááľáĽ áľáá áŤ
áá ááá á¨á˘áľáá á˘áá´ááśá˝ á áŁá á áá á áá áĽá
á áá áááá? ááá
áĽáŤá áááľ á¨ááľá áą á ááľ, á Go ááľáĽ á áŁá ááá á¨áá á¨á˘áľáá á˘áá´ááľ áĽáá´áľ áĽáá°áá°áá አááłáááľ áĽááááá.
á˘áľáááľ á áá á¨áą á¨ááἠáááĽáŤáŽá˝ áĽáť áá¸áᢠá Go ááľáĽáŁ ááá
ââá¨áŁááľ áááĽáŤáá áĽáá ááá˘
áá ááľ áŹáľáśáŤááľ áŁá
᪠á ááľ á˘áľáá á ááᢠáĽá áĽáŤááłááą á á˘áľáá ááľáĽ áŤáá á˘áľ á ááľ á¨á°áá°á ááἠá¤áľ áá
ááĽá¨áľ áĽááłáá ááá áĽáá°ááá áŤáłáŤáá˘
áááľ á áἠá°ááŁáŤáľ áŤáľááááá. á ááą á¨áĽáá á˘áľáá á áááá° ááἠáááááľ áĽá
á áá ááááᢠá áááá°áŁ ááá áá áŹáľáśáŤááą áĽáŤááłááą ááĽá¨áľ áĽáá˛áá¨á á á°áá°á ááľáᢠáááłá á ááľáŽ ááľáĽ á á¨á´á ááŤá á¨ááá˝ááŁá¸á á áŁá áĽááľ ááἠá¤áśá˝ áĽááłá á áááá, áĽá 20% á¨ááááľ á°áááľ ááŹáá´áŞáŤáá˝ á°áľáá áá¸á áĽáŹ á áľáŁáá.
ááá°áá á°ááŁá á˘áľááá áá° ááἠá¤áśá˝ áááá áááá ááá˘
áĽáŤááá áááááľ âá¨á á¨ááł á¤áľ áŤáá¸á áĽá áŚáł ááľáŤá á¨áá˝á ááŤá˝ áŤááá ááἠá¤áśá˝á á áłáŠáâᣠáááľ á˘áľ áŚááŹá˝áá˝ áŤáľáááááᥠá áá°áá áĽá áĽáá˘
áá áἠááľáĽáľáĽ á¨áááá áĽá áŚááŹá°áá á áá áá áŽáłá˝áá á áĽááą áááá áĽáá˝áááá˘
ááĽáŤááłááłá¸á áĽááá
á°ááŁáŤáľ á°ááŁáŤáľ á áá. áááąá á ááááŽáá˝ ááľáĽ áŤááá, á¨áĽáŤááłááą á°ááłá ááĽá¨ áááŽá˝á ááá°áą, á¨áľáá˝ ááś áĽáá áá áŤáá
áˇá¸á áĽá áá¤áąá á á°áá á¨á ááŤá ááľáĽ áŤáľáááĄáľ.
áĽá á áá á¨ááá áĽáŤááá áááááľ á¨áĽáá á˘áľáá áĽá á°ááŁáŤáśá˝ áá áá áĽáá˝áááá˘
á ááťá¸á áŤá áŤá
á á¨á áŤá á áá°ááᣠááá áĽááłá á°ááŁáŤáśáš á áŁá ááá á˘ááá áĽá á°ááŁáŠ á á°á ፠ááĽá á á˛áľ á¨áá¤áľ ááŤá áŁáááááľ áĽá áááἠááĽá ááá˘
á¨ppprof áá áľáá˝ ááá፠áŤá°á¨áአá ááᣠGo compiler á ááľ á áŁá ááá ááá áá á áŁá á áľááá á¨áá áááťá¸áľ áĽáá°áá°á á áľá°áááŠáĄ á°ááŁáá áá° ááľáĽ ááľááŁáľá˘
áĽáááłá áá ᨠGo compiler á ááááŽáá˝ ááľáĽ á¨ááŤáá ááá áśá˝á á áŁá áááŤá áĽá áĽáá°áá
áŤá ááá áśá˝á á¨áŤá á¨ááľáá ááľáĽ á°ááŁáŤáľá á á¨áá ááá°á á ááááá˘
áá á áááŤá áĽá áĽáá° áľáŽá áĽáŠ áá á áá áááł ááśá á áá áá á áááŁáŞáá ááłáá áĽá˝áááá˘
áĽá, áĽáá°ááłá¨á, á áá á áááŁáŞá á¨áĽáá á°ááŁá á á°áľáł áŤá°áá! á áá
ááááŤáľ 2 áááᎠá°á¨ááľ áŤá
á ááá ἠá˝áááᢠááĽá á áá°áá!
ááá°áá ááá á¨áá°áĽá°á˘áŤáá áá¤áľ á á
áá áľ á¨á°ááá¨áą ááá¨áľ ááá áá. á áááŁáŞá á áŁá áááłáá áá ááľáĽ á¨áľáá á áá°áť á áááᢠáĽáááłá áá Go á°á
áááą á¨á°á á á ááá áá, á áááŁáŞá á¨áĽá áśáľáľ ááááŽá˝ (áśáľáľ áááĽáŤáŽá˝) á¨á°ááŤá¨ áá á áŤáá¸á áá¸á áĽá ááŤ. á¨ááá á áá, á¨ááŤá ááľ á¨áá áá áľ á°áĽá á¨áá áŤá ááľá°áľ á ááľá ááľá áááá.
ááá áááĽáŤáŽá˝ á°ááłáłá áá á áŤáá¸á áááá¸áá á ááłá¨áľ á á áááŞáá áĽáá¨áááᢠá á°ááŁáŤá˝á ááááŞáŤ áá ááá áźá á áá¨áá áá
áá ááľá¨á áĽáá˝ááá.
áá
áá á ááś á áááŁáŞá áźáŠá á á°áľáł ááá áĽá áá¨á¨áť áá áá 500 ááá´áŽááśá˝ áĽáááĽáŁááá˘
áľááá áľáááá˝
áĽáşáŁ á¨ááá á á°ááŁá áŤá˝á á¨á°áá°á á ááááá˝á ááááá á˝ááááŁááá áá áá áá¤áľ á áá áŁáá áááľáá á¨ááťáá á áá á¨á¨á ááá˘
áĽá á¨ááá°ááá áá°á¨áłá á¨á˘áľ áŚááŹá˝áá˝ áĽáť ááᣠáĽá á¨áĽá ááŽá°á°á á áŁá á áĽááľ áŤá¨áááá¸ááᢠáá á ááŤáłáá áááł, á¨áĽáá ááŽá°á°á á áŁá áľáá˝ á áá áľáŤáá˝ "áĽááááŁáá". á¨áĽá á°ááŁáŤáśá˝ á áŁááľ-áŁááľ áá°á¨áľ áľáŤáá˝á áŤá¨áááá. UIint8 á á áá áá á¨64-áŁááľ áşááŽá˝ áá áááľáŤáľ áŽáłá˝áá á ááá ááľá°áŤá¨á áĽáá˝áááá˘
áĽáá°ááłá¨á áá
áľáá˝ ááἠá¨áĄáľáá áá á á áľáááľ áĽáĽá á áá¨áá ááŽááŤáá˝áá áľáááľ áá á ááĽááᢠáľáá ááľááŤá áá ááŁá áá˝ááá˘
á áá°áĽá°á˘áŤ ááľáĽ áľáá áŤ
áá áá
áá¨á¨áť á áá°áá. á¨áĽá ááŽá°á°áŽá˝ á¨16ᣠ32 áĽá á¨64 áŁááľ áááá˝ áá ááľáŤáľ áá˝ááᢠáĽáá°ááá
áŤá "á°á" áŚááŹá˝áá˝ áá á áááŞáŤ áĽá áłáł (á˛á¤áá˛; á ááľ áááŞáŤ, áĽá áá¨á) ááŁáá, áĽá áŽáľá á¨ááá¨á áá°áľ áĽáá°áá
á áááľ áľáŤáá˝á áá ááá.
áĽáá° á áááłá°á áá ᨠGo compiler á áŹáá°áŞáá˝á áá áĽá á á áŁá áĽáŠ ááᢠá á áá áá ᨠGo codeá áŹáá°á ááááŁáľ á¨ááťáá Go assemblerá á áá áá áĽááá á áŚááŹá˝áá˝ ááľáś á áĽá ááľááἠááá˘
Go assembler áĽáááł á áᏠááᢠá¨áá°áĽá°á˘áŤ ááá á¨ááľá˝áááľ áŽáááŠá°á á ááá´áá¸á áá á áĽá
á á¨á°ááŤá áááá áłáá áááá ááááá á Go ááľáĽ áá ፠á áá°ááᢠGo assembler áĽáá° IRL (ááŤá¨áá áááá ááá) ááá ááŤá¨áá ááá ááᥠá á°ááŁá á¨ááľá¨á ááť ááᢠáŽáĽ ááá áĽáŠ á ááťá¸á á áłááˇáá˘
á á°á¨ááŞá Go áŤáá°ááá° á¨ááá 9 á
áá¸áľ áá ááá áá
á á á á ááá á°ááŁáááľ áŤáá¸á AT&T áĽá Intel ááááśá˝ áááŤáá˘
Go assembler á áĽá
ááá á áŁá á áľá°áłá˝ áĽááłááá á áĽááá áááľ áááá ááťááá˘
ááᣠáĽáá° áĽáľá ááᣠGo assemblerá áĽááľáá˝á á¨áá¨áąá áááľ á¨áá°á á°á¨á ááŁáŞáŤáá˝ á áᥠPeachPy áĽá avoᢠáááąá áááááŤáá˝ Go assemblerá áĽáá°á¨á
á°á á°á¨á°áá¸á á Python áĽá Go á¨á°áťá á¨áá°á á°á¨á áŽáľ áŤáááŤáá˘
áĽááá
áááááŤáá˝ áĽáá° ááááá˘áŤ áľááľáᣠáá°áśá˝á ááťá áĽá á á á ááá á Go ááľáĽ áá°ááá á¨áá°áĽá°á˘áŤ ááŽááŤá á¨áááŁáľá áá°áľ áŤááááá˘
á áŽá áĽáá áááááŁáľááá
ááŽááŤááťá˝á áá°á á ᨠGo ááŽááŤáá˝ ááááá˘
á¨á ᎠááŽááŤá ááá ááłá áá
á áááľááᢠáá() á°ááŁá á áá ᣠá áŤáą ááľáĽ ᨠAdd() á°ááŁáá á¨áááá
á˛áá áľáááá áááľ ááĽáŽá˝á áá¨áá ááᢠáááŞáŤáá˝á á áľá áááááľ áĽá á¨ááť áĽá á°áľáá á¨ááŽá°á°á ááááá˘áŤáá˝ á ááąá áááááľ á¨á¨áłáľ á°ááŁáŤáľ áĽáá
á áᢠá ADDQ ááľáĽ áĽáá°ááłá¨á áĽáŤááłááą ááŽá°á°á áŚááŹá˝á á á Ꭰáá á°ááłá á°ááŁá á ááᢠá áá¨á¨áť ᣠá¨á°áááá áĽá´áľ ááá¨áá¸áľ á¨á¨áłáľ á°ááŁáá áĽááŤááá˘
go geneá á áá°áá ááŽááŤáá á á Ꭰáá áĽááľáá˝ááá áĽá á áá
ááááŤáľ áááľ áááá˝ ááá áŤááĄ
- á Go assembler ááľáĽ áŤáá á¨áá¤áľ áŽáľ áá add.s;
- stub.go áááąá á áá ááááááľ á¨á°ááŁá áŤáľááá˝ ááᥠááľ áĽá áá°áĽá°áĽá˘
á áá á Ꭰáá áĽáá°áá°áŤ áĽá áĽáá´áľ áĽáá°áá°áŤ á¨á°ááá¨áľá á°ááŁáŽáťá˝áá áĽááᢠáááąáá scalar áĽá vector (SIMD) á¨á°ááŁáŽáš áľáŞáśá˝á á°ááŁáŤá á áľáááŤááá˘
á ááááŞáŤ á°á¨á áľáŤáá áľáŞáśá˝á áĽááá˘
áá áĽáá° áá°áá ááłá, áá áĽá áľáááá á¨áá á¨á á ááá ááá áááἠáĽáá áááá, áááááŽáš ááŤáŤáťáá˝á áĽá áá áá˝á ááľááľ á áŤáľááááá. á Ꭰáá
á áá áŤá°ááááá.
á ááááá áááťáťá áĽá ᨠGo compilerá áááłáá áááŤáá˝á áĽá ááś (ááá ááááá˝á) áĽáá áá áá áᣠá áá áá á¨ááááŞáŤá áĽá¨á°áŤá ááᢠááĽáĄ áá°áśá˝ á¨áá°á á°á¨á áŤáá¸á á˝áá°-ááłáŚá˝ áá¸á. á áá°áĽá°á˘áŤ ááľáĽáŁ áááŤáá˝ áĽá ááááá˝ áĽáť á ááá˘
á¨á°áá¨á áŽáľ ááľááá á¨ááłáá
áĽá áá¨áł á¨áá˝á ááá á áá áľá˘ ááá á¨áľáŤááá˝ áĽá ááááá˝ áá áĽááŽáááá ᣠá¨áááą áááĽáŤáŽá˝ áľáá˝ áłáł ááľá°á á¨áľáá˝ áŚááŹá˝á áá (áĽá á áá
ááłá áá á áá°áá) áĽááŁááŤá¸ááá áĽá áá¤áąá áá°áááá ááŤá áĽááľááŁááᢠáááá˘
á¨áá¨á¨áťá á°áĽáłá˘ áŽáľ áá
á áááľááᢠááŤáŤáťáá˝á áĽá áá áá˝á (á á á¨ááá´ á¨á°áá) ááľááľ ááá áĽá
á áá á¨áááľá ááááŚá˝ áá¨áłá°á á ááá á¨áĽáá (á áá á¨á°áá)á˘
á¨ááŁáá ááá á á°ááŁá á á ááťá¸áá á á á¨áá á¨á á¨á°áťá á ááťá¸á áá áĽáááá
á¨á á°ááłáłá áááá áĽááŤááᢠáá
á°áá áá á ááᢠáááአááá á¨á°áᨠááá á áá°á¨ááá - Go compiler á¨ááŤá°áááá áĽáť áá á¨á°áŤááá˘
áĽáá° á áááłá°á áá á áááŁáŞá á áľáĽá°áŁ ááá á¨á°áá á°ááŁáŽáťá˝áá áĽáá˛áŤáľáᣠááľáá°áľ á áá˝ááᢠᨠGo compiler á á áá áá áĽáá˛á á áááľ áŁá ᪠á¨áááᣠááá áĽááłá áá°áá°á áá ááá¨áá áĽáŤá á˘áááá˘
ááá á áá á áá°áĽá°á˘áŤ ááá ááľáĽ á¨áľáá˝ á°ááŁáŤáľ ááá áĽá á ááááľ á¨áááťáá áľ. áľáá á°ááŁáŤáľá ááá ááá á á˛áąá á¨ááłáĽ/á˘áľ áĽá á áá áá ááá á¨á á°áŁáłá˘áá ááá ááá á ááĽáá˘
á áá á¨áĽáá á°ááŁáŤáľ á¨áŹáá°á áľáŞáśá˝á áĽáááá¨áľ.
ááá
ááłá, áĽá AVX2 á ááá áá áá°ááŠ, áľááá
á 32-áŁááľ áááĽáŤáŽá˝ áá á¨áá°áŠ áľáŤáá˝á áĽáá áááá. á¨áŽáą á áááአá¨áľáŤáá áľáŞáľ áá á áŁá á°ááłáłá áá: áááŞáŤáá˝á ááŤá, áá á¨á፠áááἠáá á¨á
, ááá°.
á ááľ áá ፠á°á á¨áŹáá°á áľáŤáá˝ áአá°á ááááŚá˝á áá ááá. áŁá 32 áŁááľ á¸ááá˝áŁ áĽááá
ᨠY áá á
áľá á
áĽáŤ áŤáá¸á ááááŚá˝ áá¸áᢠááá
á áá á áŽáą ááľáĽ á¨YMM() á°ááŁáá á¨ááłáŠáľá˘ AVX-512á á¨64-á˘áľ áááĽáŤáŽá˝ áá áĽá¨á°á ááአá¨áá á
áľá á
áĽáŤá Z ááááá˘
ááá°áá áá ፠á°áá loop unrolling á¨ááŁá áááťá¸áľ ááá áá áá°ááŠáŁ áá
áááľ áá° loop ááááŞáŤ á¨ááááá á ááľ áľáááľ loop áľáŤáá˝á á áĽá
ááľá¨á áááľ ááᢠáá
áááťá¸áľ á áŽáą ááľáĽ áŤááľá á¨á
áááŤáá˝á ááĽá ááááłá, áĽá á ááť ááááá˘áŤáá˝ áĽááľ á¨á°áá°á áá.
á°á
áᣠáľá á ááťá¸ááľ? ááá áá˝! á¨ááἠᨠGo áááľá áá á˛ááťá¸á á°áŁáľ áá áŤá
á ááĽááľ á áłáá°ááᢠá áľá°áá ᣠáľááá?
ááá áá áá
á á°ááŁá á áĽááłá AVX-512ᣠprefetching ááá JIT (áá-á áá áá ááá) á áá áá ááá á áá˝ááᢠáá áá
á áĽááἠáá°áᨠáŞáááľ áááľ ááá˘
á¨á˘áľáá á˘áá´ááśá˝ áá á˝ááŽá˝
á áá á Go ááľáĽ áŤááá á¨á˘áľáá á˘áá´ááľ ááá á á°ááŁá á áĽá á áľáĽá°áŁ ááá á¨á áá áá¤áłá á¨áááá á¨á°ááá¨áľáᣠá áá¨á¨áť á¨á˘áľáá á˘áá´ááśá˝ ááá áĽááĽáá áĽá
á áá áĽáá°ááá áĽáááááá˘
á¨áአáá¨ááśá˝ á¨á˘áľáá á˘áá´ááśá˝ áá áśáľáľ á˝ááŽá˝á áá á
áłáᣠááá áá áĽá áĽá á á˛áľ áá¨ááśá˝ á¨á áá á áá á°ááá
ááľ á¨ááá¸á áĽáá°áá áĽáá¨áŤá¨áŤááᢠá áĽáŤááłááłá¸á áá° áĽááá
á˝ááŽá˝ á ááá á áááŁá ááá áá á á áá áĽááł áĽáááá¨áłá¸áááá˘
á¨á¨áá°á áŤáá˛ááááľ á˝áá
áľááá
ᣠá¨á˘áľáá á˘áá´ááśá˝ áá
á°á áŤáá˛ááááľ ááá¸á ááľáŽá˝ áĽáť á°áľáá áĽáá°áá á°áááŽáá ᣠáááľá ᣠáĽááľ áĽá´áśá˝ ááá¸á (áááłá ᣠá¨ážáł ááá á¨ááá ááá) ᣠáĽá ááááŤáą áĽáá°áá
áŤá ááľáŽá˝ á¨á°ááá°á áááá (á ááľ) ááᢠá˘áľ á áá) á¨áá°á áŤáá˛ááᲠá¨ááᣠá áŁá áĽá áŚáł áááľáłá áĽá á á°á¨ááŞáᣠáĽááá
á¨á˘áľáá á˘áá´ááśá˝ á°áŤá (á áá á áá) ááááá˘
á ááłááľ áá á¨á°áᨠáááá ááá áá áĽáá˝áááᣠáááłá ááĽáŽá˝á áááá¨á á¨ááá ááá áá°á áᢠááá áá áááá ááá á¨ááá á á¨á¨áá áľáá° áááŽá˝ áááŁáľ áá áᢠáŁáááľ á áĽáá° áááłáľ ááľáĽ áłááá˛áľáśá˝ áĽá á°ááŤááŞáá˝ áá˘áľáá á¨áá°á ááĽá áŤáá¸áá á¨áááá፠áľáá° áááŽá˝á ááĽá¨ááᢠáá áĽá
áá¸á á˘áľááá ááááľ á áŤáľáááá á˘áľ áŚááŹá˝áá˝á ááá¨ááá - á á°á¨áá á˘áľáá áá á ááĽáł á¨á˘áľ áŚááŹá˝áá áá¨ááá áĽáá˝áááá˘
á á
ááĄáŁ áĽáá° áŽáŽ á˘áľáá áŤá áľá
á á ááŤá¨áŚá˝ ááłá¨áľ ááá¨ááᢠá á°ááłáłá áá ábitmaps áśáľáľ á¨á°ááŤáŠ áááááá˝á áá ááá - á˘áľáá áŤáłá¸á ᣠáľááľáŽá˝ áĽá á˘áľ áŠáŤáá˝ á¨ááŁááľ - áĽá á ááŤá¨áá¸á áŤááá ááá á¨á áááľá¨á áĽá á¨ááľáłááľ áááłá áááááľá˘
á áŁá á°ááłá
á áá áá°áá áŞáŤáá˝ ááľáĽ á¨ááŤáᣠá˘áľáá ááááľ áá˝ááᢠáá á¨áśáľáľ á áá áľáá áŤáá˝á á¨áᎠáá°ááŤáŠ á¨ááŽááŤááá ááááá˝ áĽá
á á áŁá áĽá áľáá áŤáá˝ á áá˘
á¨áá°á áŤáá˛ááááľá ááááá á¨áá¨áłá ááá á ááŤá¨áĽ á˘ááá ááŁáá. á¨á°áá áááľ á¨áááá ááľá áĽááłáá
á áľáĽá˘ áááľ á°ááłáá ááĽáĽ ááĽá áá, ááá áá áĽá á°áá˝ áĽáá°á፠á ááľá áá. ááĽá á 185,2 á´.á áĽá á 185,3 á´.á áááľ ááŤá¨á ááá ááŠááľ á¨áá.
á°ááłáłá áĽá´áśá˝á á 1 á´.á ááľáĽ á áĄáľá ááá°áĽ áĽáá˝ááá á˘
áĽá á áŁá áĽááľ á°áὠᨠ50 á´.á á áłá˝ áĽá ᨠ250 á´.á áááľ áĽáá°áá áᥠáŤáá á ᣠáĽááá˛áŤááľ ááá፠á¨áá˝ áŤáá˛ááᲠáŤááá ááľá áá° 200 á¨áá á áĽá´áśá˝á áá° ááł áááἠáĽáá˝áááá˘
áĽááἠáá, á áľááá á¨áá á áá á°á¨á᪠ááŁáŞáŤ ááľá¨á áĽáá˝ááá.
á¨áá°á á¨áá°ááá፠áááľ á˝áá
á¨á˘áľáá á˘áá´ááśá˝ ááŁáŠ á˝áá áĽááąá áááá á áŁá ááľ ááá áá˝ááá˘
á ááśáá˝ á¨ááá አááá˝ áá ááá˝ áááĄá á ááááá áľ áá á¨ááἠááłáá˝ áááĽá áááá ááťá á ááŁá¸áᢠá á ááľ áá á¨ááἠááłá¨áť ááá ááá˝ á¨áááŞáŤ á˝ááŽá˝ áá á˝ááŽá˝á áááľáááľ áááá˝ áŤáľáááááᢠáĽá á ááľ áľáá
áááá፠áŁáá áľ, á˝áá á á - á¨áááá፠áááá, áá
áááá፠ááá á áááá áľ áá.
áá
á˝áá á áťáá˛áá á áá áá ááá á¨á°áťáťá á˘áá´ááśá˝á á áá áá áááł ááá ááłáá áá˝ááá˘
áťáá˛áá ááá áĽá á¨áłáá ááá áá. áĽáá°ááááá áá ááἠá¨á˘áľáá áá¨á á ááá áá¨ááá áá˝ááᢠá¨á ááľ áľáá áááá፠ááá , áľáá˝ áááááŤáá˝á áłáááá˝á áĽá áľááá á¨áááá፠ááááá áŤáľáááłá.
á˝ááŠá ááááłáľ ááá°áá ááááľ á¨á°áťáťá á˘áá´ááśá˝á áá áá áá. ááááá ááá áááá ἠá¨ááľá ááá á˘áá´ááľ á ááľ á áᣠáĽá áááá ááá ááááá á¨ááľá ááá á ááľ á á áááá áá˝ááᢠáĽá á á°áá°á áá ááľáĽ á ááľ áá (áááłá á 100 ms ááá 500 ms á ááľ áá) á ááŁááľ áľáááŤá¸ááá ᢠá áĽááἠáá á áŤááľ á°ááŁáŤá á¨áááá áááá¨áťá áľáá˝ á¨ááᨠá¨ááá áá¨á á ááá á áááá áľ áá áĽáť ááá˘
áĽááá áááľ á ááŤá¨áŚá˝ á á ááľ áá áĽá á áá ááá áá˝áá-á¨á°ááŤá¨á áľáŞáľ áá¨á á áá áááááľ áá˝áá.
á°á¨á᪠ááľáĽáľáĽ áá ááá˝
á¨á˘áľáá á˘áá´ááśá˝ á¨áá¨á¨áťá á˝áá áá°á¨á᪠ááľáĽáľáĽ á¨áĽáŤá ááááśá˝áŁ áĽáá° áľáá áá ááá˝ á°áľáá áĽááłááá áááአááá˘
á áĽáááĽáŁ á˘áŤáľáĄáľáŁ áĽáá° ANDᣠORᣠááá° áŤá á˘áľ áŚááŹá˝áá˝ ááĽáŤááá˝ á áŁá á°áľáá á áá°áá a la âá á áłá á¨200 áĽáľá¨ 300 áśáá á¨á¤áľ ááľáĽ áá áŤáá¸á áá´áá˝á á áłá¨áá˘â
á¨áá
áĽá á áŁá áĽá ἠá¨áá°áá áááľá ááĽáŤááłááą á¨áśáá áá áá¤áąá ááľáś á¨á˘áľá ááá áŚááŹá˝á áá ááŁáá ááá˘
áľáá˝ á¨á°áťáá áááľá áá§á°áá áá áá ááᢠáááłá, á 50 áśáá áĄáľáá˝ ááľáĽ. áá
á¨áĽáá áá°áľ á 50 áá áŤááĽááá.
ááá áá ááá
ááááą áĽáŤá á á°áᨠáááł á¨á°áá á¨áá áĽááł á áá áá á˝áአá ááá áááłá. á áłáááłá áá¨ááśá˝ ááá-á˘ááŽáľ á˘áľáááľ ááŁááá˘
á áá
áááá ááľáĽáŁ áá ááłááľ áĽá´áľ á ááľ á˘áľ áĽáť á áááá
á (áááłá 200)ᣠááá áá áá
á áĽá´áľ áĽá áááá ááá á¨á á áľááá áĽááľáááŁááᢠ200 áĽá á¨á፠á ááᢠá 300: 300 áĽá á¨á፠á áá. áĽáá áááĽáá.
áá
áá áááá á áá ááᣠá˘áá´ááľá áááľ áá áĽáť á ááá á¨áá
á áááľ á¨ááá áĽáŤáá ááááľ áĽáá˝áááᢠá ááááŞáŤ ᣠááá áŤáá° ááá 300 áśáá á¨ááŤááŁáŁá¸áá áá´áá˝ áááá áĽááááá ᣠáĽá á¨á፠á¨ááá áá áŤáá°áŁá¸áá ááá 199 áśáá áĽááľáááłááᢠáááá˘
áľáá¨ááá
ᣠááá áá á¨áጠáá ááá˝ áĽááłá á¨á˘áľáá á˘áá´ááśá˝á áá áá ááťááᢠáá´á ááá ááŤáá á ááŚááľáŞá ááľá á¨áá¨á ἠá¨ááŚááľáŞá áááá áá áá ááᢠáááłáᣠS2 á¨Googleᢠáľáá á ááĽá ááá አá áá˝á áśáľáľ ááá á¨á፠á áá á¨á°á ááá ááľááŽá˝á áááá¨á ááťá á áá áľ. á áá
ááááľ á¨áá ááŚáŹáá áá° áĽá áá ááá˝ "á¨ááá°áą áá" (á áĽááá
ááĽáŽá˝ á á°á°á¨á ááľááŽá˝) áááἠáĽáá˝áááá˘
á¨áááŞáŤ áááľááá˝ áĄáĄ
áľáá˝ áĽáá°ááááá á°áľá á á°áááá áĽá á áá áá á áá ááłáŞáŤ á áŚá ááŁáŞáŤá ááľáĽ á áá ᢠáĽáá°áá á áááľ ááá ááľá¨á áŤáľáááááľ á¨áľááá ááááľ áĽáá°áááá¨áą áŤáááá˘
ááá ááᣠááá á°á á¨áŁáś á¨á˘áľáá á˘áá´ááśá˝á áááá á ááᣠáľáááľáľ ááá ááĽáľ á¨áááᢠá á°ááá á áŁá á¨ááᣠáááłá á˛áᲠá áá ááá˘
áĽáá° áĽáľá áá, áĽááľáá áááá áĽá á¨á°ááá áááľááá˝ á á.
á¨ááŤáᣠá˘áľáá
á ááááŞáŤáŁ á áľááľá á¨á°ááááŠáľ áŤá á¨ááŤáᣠá¨á˘áľáá á¤á°-áá˝áááľ á áᢠá¨á°áá á¨á˘áľáá áá¨á á áá áááá á á¨ááŤáľáááááľá áááá á áľááá ááŤáŁáá˝ áĽá á˘áľ áŚááŹá˝áá˝ áááá˘
áĽáá° á áááłá°á áá á á áá áá
áľ á¨Go áľáá áŤáá˝ ááľáĽ á ááłá¸áá SIMD á áá ááá ᣠáá
áááľ á¨á áľáá áŤáá˝ áááłá á¨á˛ á áááá áŤááą áá¸á áááľ ááá˘
áááł
ááá áá¨áłá á¨áá˝á áááľ á¨áááł á˛á˘á¤áá¤áľ ááᣠáĽáąáᣠá áĽáááąáŁ á¨á˘áľáá á˘áá´ááśá˝ áĽáť áŤááᢠáá
á á ááťáŤáááľ á á˛áľ áááľá áá, ááá áá á á¨áá°á ááĽááľ ááĽá áĽáŤá¸áá áá.
áááł á¨ááŤááł á˘áľááá á ááľáĽ á áŠá áá ááá áĽá áĽááąá ááá áá á˝ááł áá°áĽááłáᣠá¨áá á¨á°ááááłá¸áá áááŽá˝ áŤáááá áĽá áŤáĽáŤáŤá¸ááᥠáá§á°áᣠááá-á˘áŽáľ á¨á°á°á¨á á˘áľááᣠá¨ááľá á˝áá°-ááłáĽáŁ ááá°á˘
ááľáááá á¨ááŤáááľá áĽáŤá áááááľ áááłá á¨áá áá ááłáá á ááĽááľ áĽááá˘
ááłáá á¨áá
á ááľ áŤáŠáľ áá á áŁá á°ááłáłá ááᢠá°áá áá áá° áááł á áááá áĽáááĽáŤáá ᣠá˘áá´ááľ áĽá á áľááá ááľáŽá˝á áĽáááĽáŤáá ᣠá¨ááŤá ááľáŽáťá˝áá á áááá° áá¨á á¨ááŽáŁá˘áá˛áá˝ áá áĽááááá áĽá á áá¨á¨áťá á¨á°ááá°áá áĽáŤá áĽááá˝áááá˘
á¨á፠á ááᣠá "ááľ" ááľá áá á áá°áá á¨ááá áááᣠá¨ááŤá áá¤áąá (ááá AND it) á¨"áŁáŞáŤ" ááľá áĽá á¨"á¨á°áŤá áŚáłáá˝" áá áĽááááááᢠáĽá á áá¨á¨áť, á¨áá¨á¨áťáá áá¤áľ áĽááááá.
á á
áἠáá ááľáĽ áá
á á˛áľ ááááľ á˘áá´ááľ á á˛á˘á¤áá¤áľ áĽáá° MySQL áĽá PostgreSQL - bitmap indexes áĽáá°ááłá á°áľá á á°ááááá˘
áá°áá°ááŤ
áĽáľáŤáá áŤáá°á á áá°ááááᢠá áá áá°áĽ ááááŤáľ áĽá ááá° ááłáŽá˝á áŁáአáááŤáľ áá á¨áĽá ááá áá áááአá áá áĽá ááááŁáľá á á á¨áłá˝ áĽáá°ááá á°áľá á á°ááááá˘
ᨠBitmap á˘áá´ááśá˝ ááá áĽáŠ áá¸áᣠááá áĽááłá á áá áŁáŤáľáááá¸ááᢠá ááłáŞáŤ áłáĽáá ááľáĽ áá ááłáŞáŤ áááá˘
á Go á¨á°ááŤáŠ á¨á ááťá¸á áá´áá˝á áĽá ᨠGo compiler áĽáľáŤáá á á°áἠáŤááŤááľá áááŽá˝ á°áááá°ááᢠáá áá ááĽáŤááłáṠᨠGo ááŽááŤá á á᪠ááá á áŁá á áá ááá˘
áááááá
á¨áááŠáľ áá
áá áĽáť ááᢠá áá°áááá!
ááá: hab.com