Babban hira da Cliff Click, uban hada JIT a Java

Babban hira da Cliff Click, uban hada JIT a JavaCliff Danna - CTO na Cratus (Na'urori masu auna firikwensin IoT don haɓaka tsari), wanda ya kafa kuma wanda ya kafa ƙungiyoyi da yawa (ciki har da Makarantar Rocket Realtime, Neurensic da H2O.ai) tare da fitowar nasara da yawa. Cliff ya rubuta mawallafin sa na farko yana da shekaru 15 (Pascal na TRS Z-80)! An fi saninsa da aikinsa akan C2 a Java (Tekun Nodes IR). Wannan na’ura mai tarawa ya nuna wa duniya cewa JIT na iya samar da code masu inganci, wanda ya kasance daya daga cikin abubuwan da suka haifar da bullar Java a matsayin daya daga cikin manyan manhajojin manhaja na zamani. Sannan Cliff ya taimaka wa Azul Systems ya gina babbar manhaja mai lamba 864 tare da tsaftataccen software na Java wanda ke goyan bayan GC ya tsaya kan tulin gigabyte 500 a cikin dakika 10. Gabaɗaya, Cliff ya sami damar yin aiki akan duk bangarorin JVM.

 
Wannan habrapost babbar hira ce da Cliff. Za mu yi magana a kan batutuwa kamar haka:

  • Canji zuwa ƙananan haɓakawa
  • Yadda za a yi babban refactoring
  • Samfurin tsada
  • Horon inganta ƙananan matakin
  • Misalai masu amfani na haɓaka aiki
  • Me yasa ka ƙirƙiri yaren shirye-shiryen ku
  • Ayyukan Injiniya Sana'a
  • Kalubalen Fasaha
  • Kadan game da rabon rajista da Multi-cores
  • Babban kalubale a rayuwa

Tattaunawar da:

  • Andrey Satarin daga Amazon Web Services. A cikin aikinsa, ya gudanar da aiki a cikin ayyuka daban-daban: ya gwada NewSQL da aka rarraba a cikin Yandex, tsarin gano girgije a cikin Kaspersky Lab, wasan da yawa a Mail.ru da sabis don ƙididdige farashin musayar waje a Deutsche Bank. Masu sha'awar gwada manyan sikelin baya da tsarin rarrabawa.
  • Vladimir Sitnikov daga Netcracker. Shekaru goma na aiki akan aiki da haɓakar NetCracker OS, software da masu aikin sadarwar ke amfani da shi don sarrafa hanyoyin sadarwa da hanyoyin sarrafa kayan aikin cibiyar sadarwa. Ana sha'awar al'amuran aikin Java da Oracle Database. Mawallafin ingantattun ayyuka sama da dozin guda a cikin direban PostgreSQL JDBC na hukuma.

Canji zuwa ƙananan haɓakawa

Андрей: Kai babban suna ne a duniyar haɗin gwiwar JIT, Java, da aikin aiki gabaɗaya, daidai? 

Dutsen dutse: Kamar haka!

Андрей: Bari mu fara da wasu tambayoyi na gaba ɗaya game da aikin aiki. Me kuke tunani game da zabi tsakanin babban matakin ingantawa da ƙananan matakan ingantawa kamar aiki a matakin CPU?

Dutsen dutse: Ee, duk abin da yake da sauki a nan. Kodi mafi sauri shine wanda baya gudana. Sabili da haka, koyaushe kuna buƙatar farawa daga babban matakin, aiki akan algorithms. Mafi kyawun bayanin O zai buge mafi munin bayanin O, sai dai in wasu isassun manyan tsaunuka sun shiga tsakani. Ƙananan abubuwa suna tafiya na ƙarshe. Yawanci, idan kun inganta sauran tarin ku da kyau kuma akwai sauran abubuwa masu ban sha'awa da suka rage, wannan ƙaramin matakin ne. Amma yadda za a fara daga babban matakin? Ta yaya kuka san cewa an yi isassun manyan ayyuka? To... babu hanya. Babu shirye-shiryen girke-girke. Kuna buƙatar fahimtar matsalar, yanke shawarar abin da za ku yi (don kada ku ɗauki matakan da ba dole ba a nan gaba) sannan ku iya buɗe bayanin martaba, wanda zai iya faɗi wani abu mai amfani. A wani lokaci, ku da kanku kun gane cewa kun kawar da abubuwan da ba dole ba kuma lokaci yayi da za ku yi wasu ƙananan matakan daidaitawa. Tabbas wannan nau'in fasaha ne na musamman. Akwai mutane da yawa suna yin abubuwan da ba dole ba, amma suna tafiya da sauri don haka ba su da lokacin damuwa game da yawan aiki. Amma wannan ya kasance har sai tambaya ta taso a fili. Yawancin lokaci 99% na lokaci babu wanda ya damu da abin da nake yi, har zuwa lokacin da wani abu mai mahimmanci ya zo kan hanya mai mahimmanci wanda babu wanda ya damu da shi. Kuma a nan kowa ya fara ba da ku game da "me yasa bai yi aiki daidai ba tun farkon." Gabaɗaya, koyaushe akwai wani abu don haɓaka aiki. Amma 99% na lokacin ba ku da jagora! Kuna kawai ƙoƙarin yin wani abu yayi aiki kuma a cikin tsari kuna gano abin da ke da mahimmanci. Ba za ku taɓa sani ba a gaba cewa wannan yanki yana buƙatar zama cikakke, don haka, a zahiri, dole ne ku zama cikakke a cikin komai. Amma wannan ba zai yiwu ba kuma ba ku yi ba. Koyaushe akwai abubuwa da yawa da za a gyara - kuma hakan al'ada ce gaba ɗaya.

Yadda za a yi babban refactoring

Андрей: Yaya kuke aiki akan wasan kwaikwayo? Wannan matsala ce ta giciye. Misali, shin kun taɓa yin aiki akan matsalolin da suka taso daga haɗuwar yawancin ayyukan da ake dasu?

Dutsen dutse: Ina ƙoƙarin guje masa. Idan na san aikin zai zama matsala, Ina tunani game da shi kafin in fara coding, musamman tare da tsarin bayanai. Amma sau da yawa za ku gano duk wannan daga baya. Sannan dole ne ku je matsananciyar matakan kuma kuyi abin da na kira "sake rubutawa kuma ku ci nasara": kuna buƙatar ɗaukar babban isashen yanki. Wasu daga cikin lambar za a sake rubuta su saboda matsalolin aiki ko wani abu dabam. Ko menene dalilin sake rubuta lambar, kusan koyaushe yana da kyau a sake rubuta babban yanki fiye da ƙaramin yanki. A wannan lokacin, kowa ya fara girgiza da tsoro: "Ya Allahna, ba za ka iya taɓa lamba da yawa ba!" Amma a zahiri, wannan hanyar kusan koyaushe tana aiki mafi kyau. Kuna buƙatar ɗaukar babbar matsala nan da nan, zana babban da'irar kusa da ita kuma ku ce: Zan sake rubuta duk abin da ke cikin da'irar. Iyakar ta fi ƙanƙanta da abin da ke ciki wanda ke buƙatar maye gurbinsa. Kuma idan irin wannan ƙetare iyakokin ya ba ka damar yin aikin a ciki daidai, hannayenka suna da 'yanci, yi abin da kake so. Da zarar kun fahimci matsalar, tsarin sake rubutawa ya fi sauƙi, don haka ɗauki babban cizo!
A lokaci guda, lokacin da kuka yi babban sake rubutawa kuma ku gane cewa aikin zai zama matsala, nan da nan zaku iya fara damuwa game da shi. Wannan yawanci yakan juya zuwa abubuwa masu sauƙi kamar "kada ku kwafin bayanai, sarrafa bayanai a sauƙaƙe, mai da shi ƙarami." A cikin manyan sake rubutawa, akwai daidaitattun hanyoyin inganta aiki. Kuma kusan ko da yaushe suna tafe akan bayanai.

Samfurin tsada

Андрей: A cikin ɗaya daga cikin kwasfan fayiloli kun yi magana game da ƙirar farashi a cikin mahallin yawan aiki. Za ku iya bayyana abin da kuke nufi da wannan?

Dutsen dutse: Tabbas. An haife ni a zamanin da aikin na'ura ya kasance mai mahimmanci. Kuma wannan zamanin ya sake dawowa - ƙaddara ba ta da ban tsoro. Na fara rayuwa a zamanin injina masu bita takwas, kwamfutata ta farko tana aiki da bytes 256. Daidai bytes. Komai kadan ne. Dole ne a ƙidaya umarni, kuma yayin da muka fara haɓaka tari na yaren shirye-shiryen, harsunan sun ci gaba da ƙaruwa. Akwai Assembler, sannan Basic, sannan C, da C sun kula da cikakkun bayanai, kamar rabon rijista da zaɓin koyarwa. Amma komai ya bayyana a fili a can, kuma idan na yi nuni ga misalin mai canzawa, to zan sami kaya, kuma an san farashin wannan umarni. Kayan aikin yana samar da takamaiman adadin zagayowar injin, don haka ana iya ƙididdige saurin aiwatar da abubuwa daban-daban ta hanyar ƙara duk umarnin da za ku gudanar. Ana iya ƙara kowane kwatance/gwaji/reshe/kira/load/store kuma a ce: wannan shine lokacin aiwatar da ku. Lokacin aiki akan inganta aikin, tabbas za ku kula da abin da lambobi suka dace da ƙananan zazzagewar zafi. 
Amma da zaran ka canza zuwa Java, Python da makamantansu, da sauri ka ƙaura daga ƙananan kayan masarufi. Menene farashin kiran getter a Java? Idan JIT a HotSpot daidai ne a layi, zai loda, amma idan bai yi wannan ba, zai zama kiran aiki. Tunda kiran yana kan madauki mai zafi, zai ƙetare duk sauran ingantattu a cikin wannan madauki. Saboda haka, ainihin farashi zai kasance mafi girma. Kuma nan da nan za ku rasa ikon duba gunkin lambar kuma ku fahimci cewa ya kamata mu aiwatar da shi dangane da saurin agogon processor, ƙwaƙwalwar ajiya da cache da ake amfani da su. Duk wannan ya zama mai ban sha'awa kawai idan kun shiga cikin wasan kwaikwayon.
Yanzu mun tsinci kanmu a cikin wani yanayi inda saurin sarrafa masarrafa bai cika shekaru goma ba. Tsohon kwanakin sun dawo! Ba za ku iya ƙara dogaro da kyakkyawan aiki mai zare ɗaya ba. Amma idan ba zato ba tsammani ka shiga cikin layi ɗaya na kwamfuta, yana da wuyar gaske, kowa yana kallon ku kamar James Bond. Hanzarta sau goma a nan yawanci yana faruwa a wuraren da wani ya lalata wani abu. Concurrency yana buƙatar aiki mai yawa. Don samun waccan saurin XNUMXx, kuna buƙatar fahimtar ƙirar farashi. Menene kuma nawa ne kudin? Kuma don yin wannan, kuna buƙatar fahimtar yadda harshe ya dace akan kayan aiki na asali.
Martin Thompson ya zaɓi babbar kalma don blog ɗin sa Tausayin Makanikai! Kuna buƙatar fahimtar abin da kayan aikin zai yi, yadda daidai zai yi, da kuma dalilin da yasa yake yin abin da yake yi da farko. Yin amfani da wannan, yana da sauƙi a fara kirga umarni da gano inda lokacin aiwatarwa ke tafiya. Idan ba ku da horon da ya dace, kawai kuna neman baƙar fata a cikin ɗaki mai duhu. Ina ganin mutane suna inganta aikin koyaushe waɗanda ba su da masaniyar abin da jahannama suke yi. Suna shan wahala sosai kuma ba sa samun ci gaba sosai. Kuma lokacin da na ɗauki wannan lambar code, zamewa a cikin ƙananan ƙananan hacks kuma in sami saurin gudu biyar ko goma, kamar: da kyau, wannan ba daidai ba ne, mun riga mun san kun fi kyau. Abin ban mamaki. Abin da nake magana game da ... samfurin farashi shine game da irin nau'in lambar da kuka rubuta da kuma yadda sauri yake gudana a matsakaici a cikin babban hoto.

Андрей: Kuma ta yaya za ku iya ajiye irin wannan ƙarar a cikin ku? Shin ana samun wannan da ƙarin ƙwarewa, ko? Daga ina irin wannan kwarewa ta fito?

Dutsen dutse: To, ban sami gogewa ta hanya mafi sauƙi ba. Na yi shiri a Majalisar a zamanin da za ku iya fahimtar kowane umarni. Yana jin wauta, amma tun lokacin saitin umarni na Z80 ya kasance koyaushe a cikin kaina, a cikin ƙwaƙwalwar ajiya na. Ba na tuna sunayen mutane a cikin minti daya da magana, amma na tuna da code rubuta shekaru 40 da suka wuce. Yana da ban dariya, yana kama da ciwo "wawa masanin kimiyya".

Horon inganta ƙananan matakin

Андрей: Akwai hanya mafi sauƙi don shiga?

Dutsen dutse: Eh kuma a'a. Kayan aikin da muke amfani da su duka bai canza komai ba tsawon lokaci. Kowa yana amfani da x86, ban da wayoyin hannu na Arm. Idan ba ka yin wani irin hardcore embedding, kana yin abu daya. To, ci gaba. Umarnin kuma ba su canza ba tsawon ƙarni. Kuna buƙatar je ku rubuta wani abu a Majalisa. Ba yawa, amma isa don fara fahimta. Kuna murmushi, amma ina magana gaba daya da gaske. Kuna buƙatar fahimtar rubutu tsakanin harshe da kayan aiki. Bayan haka kuna buƙatar je ku rubuta kaɗan kuma ku yi ɗan harhada kayan wasan yara don ɗan ƙaramin yaren wasan yara. Irin abin wasan yara yana nufin ana buƙatar yin shi a cikin madaidaicin adadin lokaci. Zai iya zama mai sauƙi, amma dole ne ya haifar da umarni. Ayyukan samar da umarni zai taimaka maka fahimtar ƙirar farashi don gada tsakanin babban lambar da kowa ya rubuta da lambar injin da ke aiki akan kayan aikin. Za a ƙone wannan wasiƙun zuwa cikin kwakwalwa a lokacin da aka rubuta mai tarawa. Ko da mafi sauƙi mai tarawa. Bayan haka, za ku iya fara kallon Java da gaskiyar cewa tazarar tazarar ta ta fi zurfi, kuma yana da wahala a gina gadoji a kanta. A Java, yana da wuya a gane ko gadar mu ta zama mai kyau ko mara kyau, me zai sa ta rushe da abin da ba zai iya ba. Amma kuna buƙatar wani nau'i na farawa inda kuka kalli lambar kuma ku fahimta: "Ee, ya kamata a shigar da wannan getter a kowane lokaci." Kuma sai ya zama cewa wani lokacin hakan yana faruwa, sai dai yanayin lokacin da hanyar ta zama babba, kuma JIT ta fara shigar da komai. Ana iya hasashen aikin irin waɗannan wuraren nan take. Yawancin lokaci getters suna aiki da kyau, amma sai ku dubi manyan madaukai masu zafi kuma ku gane cewa akwai wasu kira na aiki da ke yawo a can waɗanda ba su san abin da suke yi ba. Wannan ita ce matsalar yawaitar amfani da getters, dalilin da ya sa ba a sanya su cikin layi ba shi ne, ba a san ko su wane ne ba. Idan kuna da babban ƙaramin tushe na lamba, zaku iya tunawa da shi kawai sannan ku ce: wannan mai ɗaukar hoto ne, kuma wannan saiti ne. A cikin babban tushe na code, kowane aiki yana rayuwa tarihin kansa, wanda, a gaba ɗaya, ba a san kowa ba. Profiler ya ce mun rasa 24% na lokaci akan wasu madauki kuma don fahimtar abin da wannan madauki yake yi, muna buƙatar duba kowane aiki a ciki. Ba shi yiwuwa a fahimci wannan ba tare da nazarin aikin ba, kuma wannan yana rage saurin fahimtar tsarin. Shi ya sa ba na amfani da getters da setters, na kai wani sabon mataki!
A ina ake samun samfurin farashi? To, za ku iya karanta wani abu, ba shakka ... Amma ina ganin hanya mafi kyau ita ce yin aiki. Yin ƙaramin mai tarawa zai zama hanya mafi kyau don fahimtar ƙirar farashi kuma ya dace da shi cikin kan ku. Ƙaramin mai tarawa wanda zai dace da shirye-shirye na microwave aiki ne don mafari. To, ina nufin, idan kuna da ƙwarewar shirye-shirye, to wannan ya isa. Duk waɗannan abubuwa kamar karkatar da kirtani da kuke da su azaman wani nau'in furci na algebra, cire umarni don ayyukan lissafi daga can cikin tsari daidai, ɗaukar madaidaitan dabi'u daga rajista - duk ana yin wannan gaba ɗaya. Kuma yayin da kuke yin shi, za a buga shi a cikin kwakwalwar ku. Ina tsammanin kowa ya san abin da mai tarawa yake yi. Kuma wannan zai ba da fahimtar samfurin farashi.

Misalai masu amfani na haɓaka aiki

Андрей: Menene kuma ya kamata ku kula yayin aiki akan yawan aiki?

Dutsen dutse: Tsarin bayanai. Af, eh, ban dade da koyar da wadannan azuzuwan ba... Makaranta Rocket. Abin farin ciki ne, amma yana buƙatar ƙoƙari mai yawa, kuma ina da rai! KO. Don haka, a cikin ɗayan manyan darussa masu ban sha'awa, "Ina aikinku ya tafi," Na ba wa ɗalibai misali: an karanta gigabytes biyu da rabi na bayanan fintech daga fayil ɗin CSV sannan kuma dole ne su ƙididdige adadin samfuran da aka sayar. . Bayanan kasuwa na yau da kullun. Fakitin UDP sun canza zuwa tsarin rubutu tun shekarun 70s. Chicago Mercantile Exchange - kowane irin abubuwa kamar man shanu, masara, waken soya, abubuwa makamantan haka. Ya zama dole a ƙidaya waɗannan samfuran, adadin ma'amaloli, matsakaicin girman motsi na kuɗi da kayayyaki, da dai sauransu. Yana da kyawawan lissafin ciniki mai sauƙi: nemo lambar samfur (wato haruffa 1-2 a cikin tebur ɗin zanta), sami adadin, ƙara shi zuwa ɗayan saitin ciniki, ƙara ƙara, ƙara ƙima, da wasu abubuwa biyu. Math mai sauqi qwarai. Aiwatar da kayan wasan wasan kwaikwayo ya kasance mai sauƙi: duk abin da ke cikin fayil, na karanta fayil ɗin kuma na motsa ta cikinsa, rarraba bayanan mutum cikin kirtani na Java, neman abubuwan da suka dace a cikinsu da kuma ƙara su bisa ga lissafin da aka kwatanta a sama. Kuma yana aiki a ɗan ƙaramin gudu.

Tare da wannan hanya, a bayyane yake abin da ke faruwa, kuma lissafin layi ɗaya ba zai taimaka ba, daidai? Ya bayyana cewa za a iya samun karuwar aiki sau biyar ta hanyar zabar madaidaitan tsarin bayanai. Kuma wannan yana ba masu shirye-shirye mamaki! A cikin yanayi na musamman, dabarar ita ce kada ku yi ƙayyadaddun ƙwaƙwalwar ajiya a cikin madauki mai zafi. To, wannan ba gaskiya ba ne, amma a gaba ɗaya - kada ku haskaka "sau ɗaya a cikin X" lokacin da X ya isa. Lokacin da X ya kasance gigabytes biyu da rabi, bai kamata ku ware wani abu "sau ɗaya kowace harafi", ko "sau ɗaya a kowane layi", ko "sau ɗaya a kowane filin", kowane abu makamancin haka. Anan ne ake kashe lokaci. Ta yaya wannan ma yake aiki? Ka yi tunanin ina yin kira String.split() ko BufferedReader.readLine(). Readline yana yin kirtani daga saitin bytes waɗanda suka zo kan hanyar sadarwar, sau ɗaya ga kowane layi, ga kowane ɗaruruwan miliyoyin layi. Na dauki wannan layin, in rarraba shi kuma in jefar da shi. Me ya sa nake jefar da shi - da kyau, na riga na sarrafa shi, shi ke nan. Don haka, ga kowane byte da aka karanta daga waɗannan 2.7G, za a rubuta haruffa guda biyu a cikin layi, wato, riga 5.4G, kuma ba na buƙatar su don wani abu, don haka an jefar da su. Idan ka kalli bandwidth ɗin ƙwaƙwalwar ajiya, muna loda 2.7G wanda ke bi ta hanyar ƙwaƙwalwar ajiya da bas ɗin ƙwaƙwalwar ajiya a cikin processor, sannan kuma sau biyu ana aika shi zuwa layin da ke kwance a ƙwaƙwalwar ajiya, kuma duk wannan yana lalacewa lokacin da aka ƙirƙiri kowane sabon layi. Amma ina buƙatar karanta shi, kayan aikin na karanta shi, ko da komai ya lalace daga baya. Kuma dole in rubuta shi saboda na ƙirƙiri layi kuma cache ɗin sun cika - cache ɗin ba zai iya ɗaukar 2.7G ba. Don haka, ga kowane byte da na karanta, na karanta ƙarin bytes biyu kuma in rubuta ƙarin bytes biyu, kuma a ƙarshe suna da rabo na 4: 1 - a cikin wannan rabo muna zubar da bandwidth memory. Kuma sai ya zama idan na yi String.split() – Wannan ba shine karo na ƙarshe da nake yin wannan ba, ana iya samun wasu filayen 6-7 a ciki. Don haka lambar al'ada ta karanta CSV sannan kuma rarraba kirtani yana haifar da ɓarna bandwidth na ƙwaƙwalwar ajiya na kusan 14: 1 dangane da abin da a zahiri kuke son samu. Idan kun jefar da waɗannan zaɓuɓɓukan, zaku iya samun saurin ninka sau biyar.

Kuma ba haka ba ne mai wahala. Idan ka kalli lambar daga kusurwar dama, duk ya zama mai sauƙi da zarar ka gane matsalar. Kada ku daina rarraba ƙwaƙwalwar ajiya gaba ɗaya: matsalar kawai ita ce ku ware wani abu kuma nan da nan ya mutu, kuma tare da hanyar yana ƙone wani muhimmin hanya, wanda a cikin wannan yanayin shine bandwidth ƙwaƙwalwar ajiya. Kuma duk wannan yana haifar da raguwar yawan aiki. A kan x86 yawanci kuna buƙatar ƙona matakan sarrafawa, amma a nan kun ƙone duk ƙwaƙwalwar ajiya da yawa a baya. Maganin shine a rage yawan fitar da ruwa. 
Wani bangare na matsalar shi ne, idan kun kunna profiler lokacin da ƙwaƙwalwar ajiyar ƙwaƙwalwar ajiya ta ƙare, daidai lokacin da ya faru, yawanci kuna jiran cache ya dawo saboda yana cike da datti da kuka samar, duk waɗannan layi. Sabili da haka, kowane kaya ko aikin kantin sayar da kaya ya zama jinkirin, saboda suna haifar da asarar cache - dukan cache ya zama jinkirin, yana jiran datti ya bar shi. Saboda haka, profiler zai kawai nuna dumi bazuwar amo da aka shafa a ko'ina cikin dukan madauki - ba za a samu daban-daban zafi umarni ko wuri a cikin code. Amo kawai. Kuma idan ka kalli zagayowar GC, dukkansu matasa ne masu tasowa kuma suna da sauri sosai - matsakaicin microseconds ko milliseconds. Bayan haka, duk wannan ƙwaƙwalwar ajiya ta mutu nan take. Ka ware biliyoyin gigabytes, ya yanke su, ya yanke su, ya sake yanke su. Duk wannan yana faruwa da sauri. Sai ya zama cewa akwai rahusa GC hawan keke, dumi amo tare da dukan sake zagayowar, amma muna so mu sami 5x gudun. A wannan lokacin, wani abu ya kamata ya rufe a cikin kai da sauti: "Me yasa wannan?!" Ba a nuni da kwararar ƙwanƙwasa ƙwaƙwalwar ajiya a cikin na'urar gyara kayan aiki na yau da kullun; kuna buƙatar gudanar da aikin gyara kayan aikin hardware kuma ku gan shi da kanku da kai tsaye. Amma ba za a iya zargin wannan kai tsaye daga waɗannan alamun guda uku ba. Alama ta uku ita ce idan ka kalli abin da ka haskaka, ka tambayi mai ba da labari, kuma ya ba da amsa: "Ka yi layuka biliyan, amma GC yayi aiki kyauta." Da zarar wannan ya faru, za ku gane cewa kun ƙirƙiri abubuwa da yawa kuma kun ƙone duka layin ƙwaƙwalwar ajiya. Akwai hanyar gano wannan, amma ba a fili yake ba. 

Matsalar tana cikin tsarin bayanan: tsarin da ba shi da tushe wanda ke ƙarƙashin duk abin da ke faruwa, yana da girma da yawa, yana da 2.7G akan faifai, don haka yin kwafin wannan abu bai dace ba - kuna son loda shi daga buffer byte na cibiyar sadarwa nan da nan. a cikin rajistar, don kada a karanta-rubutu zuwa layi baya da baya sau biyar. Abin takaici, Java ba ya ba ku irin wannan ɗakin karatu a matsayin ɓangare na JDK ta tsohuwa. Amma wannan ba komai bane, dama? Mahimmanci, waɗannan layukan lamba 5-10 ne waɗanda za a yi amfani da su don aiwatar da na'urar ɗaukar nauyin kirtani na ku, wanda ke maimaitu ɗabi'ar ajin kirtani, yayin kasancewa mai ɗaukar hoto a kusa da buffer byte. A sakamakon haka, ya zama cewa kuna aiki kusan kamar tare da kirtani, amma a gaskiya masu nuni ga buffer suna motsawa a can, kuma ba a kwafi raw bytes a ko'ina, don haka ana sake amfani da buffer iri ɗaya akai-akai, kuma tsarin aiki yana farin cikin ɗaukar kan kanku abubuwan da aka kera don su, kamar ɓoyayyun buffer biyu na waɗannan buffers na byte, kuma ba za ku ci gaba da niƙa ta hanyar rafi mara iyaka na bayanan da ba dole ba. Af, kun fahimci cewa lokacin aiki tare da GC, ana ba da tabbacin cewa kowane rabon ƙwaƙwalwar ajiya ba zai iya gani ga mai sarrafawa ba bayan zagayowar GC ta ƙarshe? Saboda haka, duk wannan ba zai yiwu ya kasance a cikin cache ba, sa'an nan kuma 100% garantin kuskure ya faru. Lokacin aiki tare da mai nuna alama, akan x86, cire rajista daga ƙwaƙwalwar ajiya yana ɗaukar hawan agogo 1-2, kuma da zaran wannan ya faru, kuna biya, biya, biya, saboda ƙwaƙwalwar tana kunne. tara caches - kuma wannan shine farashin rabon ƙwaƙwalwar ajiya. Ƙimar gaske.

A wasu kalmomi, tsarin bayanai shine abu mafi wuya don canzawa. Kuma da zarar kun gane cewa kun zaɓi tsarin bayanan da ba daidai ba wanda zai kashe aikin daga baya, yawanci akwai ayyuka da yawa da za a yi, amma idan ba ku yi ba, abubuwa za su yi muni. Da farko, kuna buƙatar yin tunani game da tsarin bayanai, wannan yana da mahimmanci. Babban farashi anan ya faɗi akan tsarin bayanan mai, waɗanda aka fara amfani da su a cikin salon "Na kwafi tsarin bayanai X cikin tsarin bayanan Y saboda na fi son siffar Y." Amma aikin kwafin (wanda yake da arha) a zahiri yana ɓata bandwidth na ƙwaƙwalwar ajiya kuma a nan ne ake binne duk lokacin aiwatar da ɓata. Idan ina da giant kirtani na JSON kuma ina so in mayar da shi zuwa tsarin DOM itace na POJOs ko wani abu, aikin tantance wannan kirtani da gina POJO, sa'an nan kuma sake samun damar POJO daga baya, zai haifar da farashi maras bukata - yana da ba mai arha ba. Sai dai idan kun yi gudu a kusa da POJOs sau da yawa fiye da yadda kuke zagaya kirtani. A hannu, a maimakon haka, zaku iya ƙoƙarin ɓoye kirtani kuma cire abin da kuke buƙata kawai daga can, ba tare da juya shi zuwa kowane POJO ba. Idan duk wannan ya faru akan hanyar da ake buƙatar matsakaicin aiki, babu POJOs a gare ku, kuna buƙatar ko ta yaya tona cikin layin kai tsaye.

Me yasa ka ƙirƙiri yaren shirye-shiryen ku

Андрей: Kun ce don fahimtar tsarin farashi, kuna buƙatar rubuta ƙaramin yaren ku ...

Dutsen dutse: Ba harshe ba, amma mai tarawa. Harshe da mai tarawa abubuwa biyu ne daban-daban. Bambanci mafi mahimmanci shine a cikin kai. 

Андрей: Af, a iya sanina, kuna gwada ƙirƙirar harsunanku. Don me?

Dutsen dutse: Domin zan iya! Na yi ritaya rabin-baki, don haka wannan sha'awa ce ta. Na kasance ina aiwatar da yarukan wasu a rayuwata. Na kuma yi aiki da yawa akan salon coding dina. Kuma saboda ina ganin matsaloli a wasu harsuna. Na ga cewa akwai mafi kyawun hanyoyin yin abubuwan da aka saba. Kuma zan yi amfani da su. Na gaji da ganin matsaloli a kaina, a Java, a Python, a kowane harshe. Yanzu na rubuta a cikin React Native, JavaScript da Elm a matsayin abin sha'awa wanda ba game da ritaya ba, amma game da aiki mai aiki. Na kuma rubuta a cikin Python kuma, mai yiwuwa, zan ci gaba da yin aiki akan koyon injin don abubuwan baya na Java. Akwai shahararrun harsuna da yawa kuma duk suna da fasali masu ban sha'awa. Kowa yana da kyau a hanyarsa kuma kuna iya ƙoƙarin kawo duk waɗannan fasalulluka tare. Don haka, ina nazarin abubuwan da ke ba ni sha'awa, halayen harshe, ƙoƙarin fito da ma'anar ma'ana. Kuma har yanzu ina yin nasara! A halin yanzu ina fama da ilimin ilimin ƙwaƙwalwar ajiya, saboda ina so in sami shi kamar a cikin C da Java, kuma in sami samfurin ƙwaƙwalwar ajiya mai ƙarfi da ƙididdigar ƙwaƙwalwar ajiya don kaya da shaguna. A lokaci guda, sami zaɓi na atomatik kamar na Haskell. Anan, Ina ƙoƙarin haɗa nau'in inference irin na Haskell tare da aikin ƙwaƙwalwar ajiya a duka C da Java. Wannan shine abin da nake yi na watanni 2-3 na ƙarshe, misali.

Андрей: Idan ka gina harshe wanda ya ɗauki abubuwa masu kyau daga wasu harsuna, kana tunanin cewa wani zai yi akasin haka: ɗauki ra'ayoyinka ka yi amfani da su?

Dutsen dutse: Wannan shine ainihin yadda sabbin harsuna ke bayyana! Me yasa Java yayi kama da C? Domin C yana da kyakkyawar ma'ana wanda kowa ya fahimta kuma Java ya yi wahayi zuwa gare shi ta wannan syntax, yana ƙara nau'in aminci, array bounds checking, GC, kuma sun inganta wasu abubuwa daga C. Sun ƙara nasu. Amma an yi musu wahayi sosai, dama? Kowa ya tsaya a kafadar ’yan kato da gora da suka zo gabanka – haka ake samun ci gaba.

Андрей: Kamar yadda na fahimce shi, yarenku zai zama amintaccen ƙwaƙwalwar ajiya. Shin kun yi tunanin aiwatar da wani abu kamar mai duba rance daga Rust? Ka dube shi, me kake tunani game da shi?

Dutsen dutse: To, Na kasance ina rubuta C shekaru da yawa, tare da duk wannan malloc da kyauta, kuma da hannu sarrafa rayuwa. Ka sani, 90-95% na lokacin rayuwar da aka sarrafa da hannu yana da tsari iri ɗaya. Kuma yana da matuƙar wahala, yin shi da hannu. Ina so mai tarawa ya gaya muku kawai abin da ke faruwa a wurin da abin da kuka cim ma da ayyukanku. Ga wasu abubuwa, mai duba rance yana yin wannan daga cikin akwatin. Kuma yakamata ta nuna bayanai ta atomatik, fahimtar komai, kuma kar ma ta dora ni da gabatar da wannan fahimtar. Dole ne ya yi bincike aƙalla na tserewa na gida, kuma idan ya gaza, to yana buƙatar ƙara nau'in bayanan da za su bayyana tsawon rayuwa - kuma irin wannan makircin ya fi rikitarwa fiye da mai duba rance, ko kuma duk wani mai duba ƙwaƙwalwar ajiya. Zaɓin tsakanin "komai yana da kyau" da "Ban gane komai ba" - a'a, dole ne a sami wani abu mafi kyau. 
Don haka, a matsayin wanda ya rubuta lamba da yawa a cikin C, Ina tsammanin samun tallafi don sarrafa rayuwa ta atomatik shine abu mafi mahimmanci. Har ila yau, na kosa da yadda Java ke amfani da ƙwaƙwalwar ajiya kuma babban korafin shine GC. Lokacin da ka keɓance ƙwaƙwalwar ajiya a Java, ba za ka dawo da memorin da ke gida ba a ƙarshen GC. Wannan ba haka yake ba a cikin yarukan da ke da ingantaccen sarrafa ƙwaƙwalwar ajiya. Idan ka kira malloc, nan da nan za ka sami ƙwaƙwalwar ajiyar da aka saba amfani da ita. Yawancin lokaci kuna yin wasu abubuwa na wucin gadi tare da ƙwaƙwalwar ajiya kuma nan da nan mayar da shi. Kuma nan da nan ya koma malloc pool, da kuma na gaba malloc sake zagayowar sake fitar da shi. Saboda haka, ainihin amfani da ƙwaƙwalwar ajiya yana raguwa zuwa saitin abubuwa masu rai a wani lokaci da aka ba da shi, da leaks. Kuma idan komai bai zube ta hanyar da ba ta dace ba, yawancin ƙwaƙwalwar ajiya tana ƙarewa a cikin caches da na'ura mai sarrafawa, kuma yana aiki da sauri. Amma yana buƙatar mai yawa sarrafa ƙwaƙwalwar ajiyar hannu tare da malloc kuma ana kiransa kyauta a cikin tsari mai kyau, a daidai wurin. Tsatsa na iya sarrafa wannan yadda ya kamata da kanta, kuma a lokuta da yawa yana ba da mafi kyawun aiki, tunda an rage amfani da ƙwaƙwalwar ajiya zuwa lissafin yanzu kawai - sabanin jira na gaba GC sake zagayowar don 'yantar da ƙwaƙwalwar ajiya. A sakamakon haka, mun sami hanya mai ban sha'awa don inganta aiki. Kuma mai ƙarfi sosai - Ina nufin, na yi irin waɗannan abubuwa lokacin sarrafa bayanai don fintech, kuma wannan ya ba ni damar samun saurin kusan sau biyar. Wannan kyakkyawan babban haɓaka ne, musamman a cikin duniyar da na'urori masu sarrafawa ba sa sauri kuma har yanzu muna jiran haɓakawa.

Ayyukan Injiniya Sana'a

Андрей: Ina kuma so in yi tambaya game da sana'o'i gabaɗaya. Kun yi fice tare da aikin ku na JIT a HotSpot sannan kuma ku koma Azul, wanda kuma kamfani ne na JVM. Amma mun riga mun yi aiki akan hardware fiye da software. Sannan ba zato ba tsammani sai suka koma Big Data da Machine Learning, sannan suka koma gano zamba. Ta yaya hakan ya faru? Wadannan fannoni ne na ci gaba daban-daban.

Dutsen dutse: Na daɗe ina yin shirye-shirye kuma na sami damar ɗaukar azuzuwan da yawa. Kuma lokacin da mutane suka ce: “Oh, kai ne ka yi JIT don Java!”, koyaushe abin ban dariya ne. Amma kafin wannan, ina aiki akan clone na PostScript - yaren da Apple ya taɓa amfani da shi don firintocinsa na laser. Kuma kafin nan na yi aiwatar da Harshen Na Gaba. Ina tsammanin jigon gama gari a gare ni shine haɓaka kayan aiki. Duk rayuwata ina yin kayan aikin da wasu mutane ke rubuta shirye-shiryensu masu kyau da su. Amma na kuma shiga cikin ci gaban tsarin aiki, direbobi, masu gyara matakan kernel, harsuna don ci gaban OS, waɗanda suka fara da sauƙi, amma bayan lokaci ya zama ƙari. Amma babban batu har yanzu shine ci gaban kayan aiki. Babban bangare na rayuwata ya wuce tsakanin Azul da Sun, kuma game da Java ne. Amma da na shiga Big Data da Machine Learning, sai na mayar da hulata mai ban sha'awa na ce, "Oh, yanzu muna da matsala marar sauƙi, kuma akwai abubuwa masu ban sha'awa da yawa da ke faruwa kuma mutane suna yin abubuwa." Wannan babbar hanyar ci gaba ce da za a bi.

Ee, ina matukar son rarraba kwamfuta. Aikina na farko shine ɗalibi a C, akan aikin talla. An rarraba wannan ƙididdiga akan kwakwalwan kwamfuta na Zilog Z80 waɗanda suka tattara bayanai don analog OCR, wanda ainihin mai nazarin analog ya samar. Labari ne mai sanyi da hauka gabaki ɗaya. Amma akwai matsaloli, wani sashi ba a gane shi daidai ba, don haka dole ne ka ɗauki hoto ka nuna wa wanda ya riga ya karanta da idanunsa kuma ya ba da rahoton abin da ya ce, don haka akwai ayyuka da bayanai, da waɗannan ayyukan. suna da yarensu . Akwai baya wanda ya sarrafa duk wannan - Z80s yana gudana a layi daya tare da tashoshi vt100 da ke gudana - ɗaya akan kowane mutum, kuma akwai samfurin shirye-shirye a layi daya akan Z80. Wasu gamammen yanki na ƙwaƙwalwar ajiya wanda duk Z80s ke rabawa a cikin tsarin tauraro; Hakanan an raba jirgin baya, kuma an raba rabin RAM a cikin hanyar sadarwar, wani rabin kuma na sirri ne ko kuma ya tafi wani abu daban. Tsarin rarraba daidaitaccen ma'ana mai ma'ana mai ma'ana tare da raba ... ƙwaƙwalwar raƙuman raƙuman raɗaɗi. Yaushe wannan ... Ba zan iya tunawa ba, wani wuri a tsakiyar 80s. Da dadewa. 
Haka ne, bari mu ɗauka cewa shekaru 30 sun daɗe da yawa. Matsalolin da ke da alaƙa da rarraba kwamfuta sun wanzu na dogon lokaci; mutane sun daɗe suna yaƙi da su. Beowulf-gungu. Irin waɗannan gungu suna kama da ... Misali: akwai Ethernet kuma x86 ɗinku mai sauri yana haɗa zuwa wannan Ethernet, kuma yanzu kuna son samun ƙwaƙwalwar ajiya ta karya, saboda babu wanda zai iya yin rikodin kwamfyutantarwa a lokacin, yana da wahala sosai don haka akwai. Ƙwaƙwalwar ajiya ce ta karya tare da shafukan ƙwaƙwalwar kariya akan x86, kuma idan kun rubuta zuwa wannan shafin, to, mun gaya wa sauran masu sarrafawa cewa idan sun sami dama ga ƙwaƙwalwar ajiyar da aka raba, zai buƙaci a loda shi daga gare ku, don haka wani abu kamar yarjejeniya don tallafawa. haɗin cache ya bayyana kuma software don wannan. Ra'ayi mai ban sha'awa. Matsala ta gaske, ba shakka, wani abu ne daban. Duk wannan ya yi aiki, amma kun sami matsalolin aiki da sauri, saboda babu wanda ya fahimci ƙirar wasan kwaikwayon a matakin da ya dace - menene tsarin samun damar ƙwaƙwalwar ajiya, yadda za a tabbatar da cewa nodes ɗin ba su ƙare ping juna ba, da sauransu.

Abin da na zo da shi a cikin H2O shi ne cewa su kansu masu haɓakawa ne ke da alhakin tantance inda aka ɓoye daidaitattun da kuma inda ba haka ba. Na fito da ƙirar ƙididdigewa wanda ya sa rubuta lambar ayyuka mai girma cikin sauƙi da sauƙi. Amma rubuta lambar sannu-sannu yana da wahala, zai yi kyau. Kuna buƙatar yin ƙoƙari sosai don rubuta lambar jinkirin, dole ne ku yi amfani da hanyoyin da ba daidai ba. Lambar birki tana bayyane a kallon farko. A sakamakon haka, yawanci kuna rubuta lambar da ke aiki da sauri, amma dole ne ku gano abin da za ku yi a yanayin ƙwaƙwalwar ajiya. Duk waɗannan an haɗa su da manyan tsararru kuma halayen da ke can suna kama da manyan tsararrun da ba su da ƙarfi a cikin layi ɗaya na Java. Ina nufin, yi tunanin cewa zaren guda biyu suna rubuta zuwa layi ɗaya, ɗaya daga cikinsu ya yi nasara, ɗayan kuma, bisa ga haka, ya yi hasara, kuma ba ku san wanene ba. Idan ba su da ƙarfi, to tsari na iya zama duk abin da kuke so - kuma wannan yana aiki sosai. Mutane da gaske suna kula da tsari na ayyuka, suna sanya maras kyau a wuraren da suka dace, kuma suna tsammanin matsalolin aiki masu alaƙa da ƙwaƙwalwar ajiya a wuraren da suka dace. In ba haka ba, kawai za su rubuta lamba ta hanyar madaukai daga 1 zuwa N, inda N yake wasu tiriliyan, da fatan cewa duk lokuta masu rikitarwa za su kasance daidai da kai tsaye - kuma ba ya aiki a can. Amma a cikin H2O wannan ba Java ba ne ko Scala; zaku iya la'akari da shi "Java debewa" idan kuna so. Wannan salon shirye-shirye ne bayyananne kuma yayi kama da rubuta sauƙi C ko lambar Java tare da madaukai da tsararru. Amma a lokaci guda, ana iya sarrafa ƙwaƙwalwar ajiya a cikin terabytes. Har yanzu ina amfani da H2O. Ina amfani da shi lokaci zuwa lokaci a cikin ayyuka daban-daban - kuma har yanzu shine abu mafi sauri, sau da yawa cikin sauri fiye da masu fafatawa. Idan kuna yin Big Data tare da bayanan columnar, yana da matukar wahala a doke H2O.

Kalubalen Fasaha

Андрей: Menene babban kalubalenku a duk aikinku?

Dutsen dutse: Shin muna tattaunawa akan sashin fasaha ko na fasaha na batun? Zan iya cewa babban kalubale ba na fasaha ba ne. 
Amma ga kalubalen fasaha. Na dai doke su ne kawai. Ban ma san menene mafi girma ba, amma akwai wasu kyawawan abubuwan ban sha'awa waɗanda suka ɗauki ɗan lokaci kaɗan, gwagwarmayar tunani. Lokacin da na je Sun, na tabbata cewa zan yi na'ura mai sauri, kuma gungun tsofaffi sun amsa cewa ba zan taba yin nasara ba. Amma na bi wannan hanyar, na rubuta mai tarawa zuwa ga mai raba rajista, kuma yana da sauri sosai. Yana da sauri kamar C1 na zamani, amma mai rarrabawa ya kasance a hankali a hankali a lokacin, kuma a cikin hangen nesa babban matsala ce ta tsarin bayanai. Ina bukatan shi don rubuta mai rarraba rajistar hoto kuma ban fahimci matsalar da ke tsakanin bayyana ra'ayi da sauri ba, wanda ya wanzu a wancan lokacin kuma yana da mahimmanci. Ya juya cewa tsarin bayanan yawanci ya wuce girman cache akan x86s na wancan lokacin, sabili da haka, idan da farko na ɗauka cewa mai rarraba rajista zai yi aiki da kashi 5-10 na jimlar lokacin jitter, to a zahiri ya zama. 50 bisa dari.

Yayin da lokaci ya ci gaba, mai tarawa ya zama mai tsabta da inganci, ya daina samar da muggan code a lokuta da yawa, kuma aikin ya fara kama da abin da C compiler ke samarwa. . Idan ka rubuta lamba kamar C, za ka sami aiki kamar C a ƙarin lokuta. Kuma da kuka ci gaba, sau da yawa kuna samun lambar da ta zo daidai da matakin C, mai raba rajista ya fara kama da wani abu cikakke… ba tare da la'akari da ko lambar ku tana aiki da sauri ko a hankali ba. Na ci gaba da aiki a kan allocator don yin mafi kyawun zaɓi. Ya zama mai hankali da hankali, amma ya ba da mafi kyawun aiki a cikin lokuta inda babu wanda zai iya jurewa. Zan iya nutsewa cikin mai raba rajista, binne wata na aiki a can, kuma ba zato ba tsammani duk lambar za ta fara aiwatar da 5% cikin sauri. Wannan ya faru lokaci bayan lokaci kuma mai raba rajista ya zama wani abu na aikin fasaha - kowa yana son shi ko ya ƙi shi, kuma mutane daga makarantar sun yi tambayoyi game da batun "me yasa duk abin da aka yi haka", me yasa ba haka ba. duban layi, kuma menene bambanci. Amsar ita ce har yanzu: mai rarrabawa dangane da canza launi tare da taka tsantsan aiki tare da lambar buffer daidai yake da makamin nasara, mafi kyawun haɗin da babu wanda zai iya cin nasara. Kuma wannan abu ne da ba a bayyane yake ba. Duk abin da mai tarawa ya yi akwai abubuwan da aka yi nazari sosai, kodayake su ma an kai su matakin fasaha. A koyaushe ina yin abubuwan da ya kamata su mayar da mai tarawa zuwa aikin fasaha. Amma babu ɗayan waɗannan da ya zama wani abin ban mamaki - sai ga mai raba rajista. Dabarar ita ce a yi hattara yanke a karkashin kaya kuma, idan wannan ya faru (Zan iya yin bayani dalla-dalla idan sha'awar), wannan yana nufin cewa za ku iya yin layi da karfi da karfi, ba tare da hadarin fadowa a kan kink a cikin jadawalin aiki ba. A wancan zamani, akwai gungun manyan na’urori masu tarin yawa, wadanda aka rataye da baufai da busa, wadanda suke da masu raba rajista, amma babu wanda zai iya yi.

Matsalar ita ce, idan kun ƙara hanyoyin da ke da alaƙa, haɓakawa da haɓaka yankin inlining, saitin dabi'un da aka yi amfani da su nan take ya zarce adadin rajista, kuma dole ne ku yanke su. Matsayi mai mahimmanci yakan zo lokacin da mai rarrabawa ya daina, kuma ɗan takara mai kyau don zube yana da daraja wani, za ku sayar da wasu abubuwan daji gaba ɗaya. Darajar sakawa anan shine ka rasa wani ɓangare na sama, sama don kira da adanawa, zaku iya ganin ƙimar ciki kuma kuna iya ƙara haɓaka su. Farashin inlining shine cewa an ƙirƙiri adadi mai yawa na ƙimar rayuwa, kuma idan mai rarraba rajistar ku ya ƙone sama da buƙata, nan da nan za ku yi hasara. Sabili da haka, yawancin masu rarrabawa suna da matsala: lokacin da inlining ya ketare wani layi, duk abin da ke cikin duniya ya fara raguwa kuma ana iya zubar da yawan aiki a bayan gida. Wadanda ke aiwatar da mai tarawa suna ƙara wasu ilimin lissafi: alal misali, don dakatar da inlining, farawa da wasu isassun girman girman, tunda rabon kuɗi zai lalata komai. Wannan shi ne yadda aka kafa kink a cikin jadawali na wasan kwaikwayo - ku kan layi, layi, wasan kwaikwayon yana girma a hankali - sannan kuma haɓaka! - yana faɗuwa kamar jack mai sauri saboda kun yi layi da yawa. Haka komai yayi aiki kafin zuwan Java. Java yana buƙatar ƙarin inlining, don haka dole ne in sanya mai rarraba nawa ya fi ƙarfin hali don ya fita maimakon yin karo, kuma idan kun yi layi da yawa, sai ya fara zubewa, amma sai lokacin "babu zubewa" yana zuwa. Wannan abin kallo ne mai ban sha'awa kuma kawai ya zo gare ni daga babu inda, ba a bayyane ba, amma ya biya da kyau. Na ɗauki inlining m kuma ya kai ni wuraren da Java da C yi aiki kafada da kafada. Suna da kusanci da gaske - Zan iya rubuta lambar Java wacce take da sauri fiye da lambar C da abubuwa makamantansu, amma a matsakaici, a cikin babban hoton abubuwa, suna da kwatankwacin kwatankwacinsu. Ina tsammanin wani ɓangare na wannan abin yabo shine mai raba rijista, wanda ke ba ni damar yin layi a cikin wauta kamar yadda zai yiwu. Ina layi duk abin da na gani. Tambayar a nan ita ce ko allocator yana aiki da kyau, ko sakamakon shine lambar aiki da hankali. Wannan babban ƙalubale ne: fahimtar duk wannan kuma sanya shi aiki.

Kadan game da rabon rajista da Multi-cores

VladimirMatsaloli kamar rabon rajista suna kama da wani nau'i na har abada, batu mara iyaka. Ina mamakin ko an taɓa samun wani ra'ayi da ya yi kama da alƙawari sannan kuma ya gaza a aikace?

Dutsen dutse: Tabbas! Rajistar Rajistar yanki ne da kuke ƙoƙarin nemo wasu ƙididdiga don magance matsalar NP-cikakke. Kuma ba za ku taɓa samun cikakkiyar mafita ba, daidai? Wannan ba zai yiwu ba. Duba, Gaban Lokaci Tarin - kuma yana aiki mara kyau. Tattaunawar anan shine game da wasu matsakaita lokuta. Game da wasan kwaikwayo na al'ada, don haka za ku iya zuwa ku auna wani abu da kuke tsammanin yana da kyau na al'ada - bayan haka, kuna aiki don inganta shi! Rarraba rajista jigo ne game da aiki duka. Da zarar kun sami samfurin farko, yana aiki da fenti abin da ake buƙata, aikin aikin ya fara. Kuna buƙatar koya don auna da kyau. Me yasa yake da mahimmanci? Idan kuna da cikakkun bayanai, za ku iya duba wurare daban-daban kuma ku gani: eh, ya taimaka a nan, amma a nan ne duk abin ya karye! Wasu ra'ayoyi masu kyau sun fito, kun ƙara sabon heuristics kuma ba zato ba tsammani komai ya fara aiki kaɗan kaɗan a matsakaici. Ko kuma baya farawa. Ina da tarin shari'o'in da muke gwagwarmaya don aikin kashi biyar cikin dari wanda ya bambanta ci gabanmu da wanda ya gabata. Kuma duk lokacin da ya yi kama da haka: wani wuri ka yi nasara, wani wuri ka rasa. Idan kuna da kayan aikin bincike mai kyau, zaku iya nemo ra'ayoyin da suka ɓace kuma ku fahimci dalilin da yasa suka gaza. Wataƙila yana da kyau a bar komai yadda yake, ko wataƙila ɗaukar hanya mafi mahimmanci don daidaitawa, ko fita da gyara wani abu dabam. Yana da tarin abubuwa! Na yi wannan hack mai kyau, amma ina kuma buƙatar wannan, da wannan, da wannan, da kuma wannan - kuma haɗin gwiwar su yana ba da wasu cigaba. Kuma masu zaman kansu na iya kasawa. Wannan shine yanayin aikin aiki akan matsalolin NP-cikakke.

Vladimir: Mutum yana jin cewa abubuwa kamar zane-zane a cikin allocators matsala ce da aka riga an warware. To, an yanke muku hukunci, kuna yin hukunci da abin da kuke faɗa, don haka yana da daraja a lokacin ...

Dutsen dutse: Ba a warware shi kamar haka. Kai ne dole ne ka juya shi zuwa "warware". Akwai matsaloli masu wahala kuma suna bukatar a magance su. Da zarar an yi haka, lokaci ya yi da za a yi aiki akan yawan aiki. Kuna buƙatar kusanci wannan aikin daidai - yi ma'auni, tattara ma'auni, bayyana yanayi lokacin da, lokacin da kuka juya baya zuwa sigar da ta gabata, tsohon hack ɗinku ya fara aiki kuma (ko akasin haka, ya tsaya). Kuma kada ku yi kasala har sai kun cimma wani abu. Kamar yadda na riga na fada, idan akwai kyawawan ra'ayoyin da ba su yi aiki ba, amma a fagen rarraba ra'ayoyin ra'ayoyin yana da kusan marar iyaka. Kuna iya, alal misali, karanta littattafan kimiyya. Ko da yake a yanzu wannan yanki ya fara tafiya sannu a hankali kuma ya bayyana a fili fiye da lokacin samartaka. Duk da haka, akwai mutane da yawa da ke aiki a wannan filin kuma duk ra'ayoyinsu sun cancanci gwadawa, duk suna jira a cikin fuka-fuki. Kuma ba za ku iya sanin yadda suke da kyau ba sai kun gwada su. Yaya yadda suke haɗawa da duk wani abu a cikin mai rarraba ku, saboda mai rarrabawa yana yin abubuwa da yawa, kuma wasu ra'ayoyin ba za su yi aiki a cikin takamaiman mai rarraba ku ba, amma a cikin wani mai rarrabawa za su yi sauƙi. Babban hanyar samun nasara ga mai rarrabawa shine a cire kayan jinkirin a waje da babban hanya kuma a tilasta shi ya rabu tare da iyakokin hanyoyin jinkirin. Don haka idan kuna son gudanar da GC, ɗauki hanya a hankali, inganta haɓakawa, jefa banda, duk waɗannan abubuwan - kun san waɗannan abubuwan ba su da yawa. Kuma suna da wuyar gaske, na duba. Kuna yin ƙarin aiki kuma yana kawar da hani da yawa akan waɗannan hanyoyin jinkirin, amma ba komai bane da gaske saboda suna jinkirin tafiya kuma ba kasafai suke tafiya ba. Misali, alamar null - ba zai taɓa faruwa ba, daidai? Kuna buƙatar samun hanyoyi da yawa don abubuwa daban-daban, amma kada su tsoma baki tare da babba. 

Vladimir: Me kuke tunani game da Multi-cores, lokacin da akwai dubban murjani a lokaci ɗaya? Shin wannan abu ne mai amfani?

Dutsen dutse: Nasarar GPU ta nuna cewa yana da amfani sosai!

Vladimir: Suna da ƙwarewa sosai. Me game da na'urorin sarrafa manufa na gaba ɗaya?

Dutsen dutse: To, wannan shine tsarin kasuwancin Azul. Amsar ta dawo a zamanin da mutane ke matukar son aikin da ake iya faɗi. Yana da wahala a rubuta layi ɗaya a lokacin. Samfurin coding na H2O yana da ƙima sosai, amma ba ƙirar manufa ta gaba ɗaya ba ce. Watakila kaɗan kaɗan fiye da lokacin amfani da GPU. Shin muna magana ne game da rikitarwa na haɓaka irin wannan abu ko kuma wahalar amfani da shi? Misali, Azul ya koya mani darasi mai ban sha'awa, wanda ba a bayyane yake ba: ƙananan caches na al'ada ne. 

Babban kalubale a rayuwa

Vladimir: Me game da kalubalen da ba na fasaha ba?

Dutsen dutse: Babban kalubalen shine rashin zama ... masu kirki da kyautatawa ga mutane. Kuma a sakamakon haka, koyaushe ina tsinci kaina a cikin yanayi na rikice-rikice. Waɗanda na san abubuwa suna faruwa ba daidai ba, amma ba su san yadda za a ci gaba da waɗannan matsalolin ba kuma ba za su iya magance su ba. Matsaloli da yawa na dogon lokaci, waɗanda suka daɗe shekaru da yawa, sun taso ta wannan hanyar. Kasancewar Java tana da masu tarawa C1 da C2 sakamakon haka ne kai tsaye. Kasancewar ba a taru a cikin Java na tsawon shekaru goma a jere shi ma sakamakon haka ne kai tsaye. A bayyane yake cewa muna buƙatar irin wannan tsarin, amma ba a bayyana dalilin da ya sa ba ya wanzu. Na sami matsala da injiniya ɗaya ... ko ƙungiyar injiniyoyi. A wani lokaci, lokacin da na fara aiki a Sun, na kasance ... Lafiya, ba kawai lokacin ba, koyaushe ina da ra'ayi na akan komai. Kuma na ga gaskiya ne kawai za ku iya ɗaukar wannan gaskiyar ta ku ku faɗa gaba ɗaya. Musamman tunda na kasance mai ban mamaki dama mafi yawan lokuta. Kuma idan ba ku son wannan hanya ... musamman idan kun kasance a fili ba daidai ba kuma kuna yin shirme ... Gabaɗaya, mutane kaɗan ne za su iya jure wa irin wannan hanyar sadarwa. Ko da yake wasu na iya, kamar ni. Na gina rayuwata gaba ɗaya bisa ƙa'idodin cancanta. Idan ka nuna min wani abu ba daidai ba, nan da nan zan juyo na ce: ka fadi banza. A lokaci guda, ba shakka, ina neman afuwa da duk wannan, zan lura da cancantar, idan akwai, kuma in ɗauki wasu ayyuka masu kyau. A daya bangaren, Ina da ban mamaki daidai game da kaso mai ban mamaki na jimlar lokaci. Kuma ba ya aiki sosai a cikin dangantaka da mutane. Ba na ƙoƙarin zama kyakkyawa, amma ina tambayar tambayar a hankali. "Wannan ba zai taba aiki ba, saboda daya, biyu da uku." Kuma sun kasance kamar, "Oh!" Akwai wasu sakamakon da watakila ya fi kyau a yi watsi da su: misali, waɗanda suka kai ga saki da matata da kuma shekaru goma na ciki bayan haka.

Kalubale shine gwagwarmaya tare da mutane, tare da fahimtar abin da za ku iya ko ba za ku iya ba, abin da ke da mahimmanci da abin da ba haka ba. Akwai kalubale da yawa game da salon coding. Har yanzu ina rubuta code da yawa, kuma a wancan zamanin ma sai da na rage gudu saboda ina yin ayyuka iri-iri da yawa kuma ina yin su mara kyau, maimakon mayar da hankali kan ɗayan. Idan muka waiwaya baya, na rubuta rabin lambar don umarnin Java JIT, umarnin C2. Na gaba mafi sauri codeer ya rubuta rabi a hankali, rabi na gaba a hankali, kuma ya kasance raguwa mai ma'ana. Mutum na bakwai a cikin wannan jeri ya kasance da sauri da kuma jinkirin - hakan yana faruwa koyaushe! Na taba lamba da yawa. Na kalli wane ne ya rubuta, ba tare da togiya ba, na kalli code dinsu, na bitar kowannensu, har yanzu na ci gaba da rubuta kaina fiye da kowanensu. Wannan hanyar ba ta aiki sosai tare da mutane. Wasu ba sa son wannan. Kuma a lokacin da ba za su iya magance shi ba, sai a fara koke-koke iri-iri. Misali, an taba gaya min cewa in daina yin codeing saboda ina rubuta code da yawa kuma hakan yana jefa kungiyar cikin hadari, kuma duk abin ya zama kamar wasa a gare ni: dan uwa, idan sauran tawagar sun bace kuma na ci gaba da rubuta code, kai 'zamu rasa rabin kungiyoyi ne kawai. A gefe guda, idan na ci gaba da rubuta lambar kuma kun rasa rabin ƙungiyar, wannan yana kama da mummunan gudanarwa. Ban taɓa tunanin gaske game da shi ba, ban taɓa yin magana game da shi ba, amma har yanzu yana cikin wani wuri a cikin kaina. Tunani yana juyawa a bayan raina: "Duk kuna wasa dani?" Don haka, babbar matsalar ita ce ni da dangantakata da mutane. Yanzu na fahimci kaina da kyau, na kasance jagorar ƙungiyar don masu shirye-shirye na dogon lokaci, kuma yanzu ina gaya wa mutane kai tsaye: kun sani, ni wanene, kuma za ku yi ma'amala da ni - ba laifi idan na tsaya. nan? Kuma lokacin da suka fara magance shi, komai ya yi aiki. A gaskiya, ni ba mummuna ba ne kuma ba mai kyau ba ne, ba ni da wani mugun nufi ko buri na son rai, kawai jigon nawa ne, kuma ina buƙatar rayuwa tare da shi ko ta yaya.

Андрей: Kwanan nan kowa ya fara magana game da sanin kai don gabatarwa, da kuma basira mai laushi a gaba ɗaya. Me za ku ce kan wannan?

Dutsen dutse: E, wannan shine basira da darasi na koya daga saki na da matata. Abin da na koya daga saki shine fahimtar kaina. Haka na fara fahimtar sauran mutane. Fahimtar yadda wannan hulɗar ke aiki. Wannan ya haifar da binciken daya bayan daya. Akwai sanin ko wanene ni da abin da nake wakilta. Abin da nake yi: ko dai na shagaltu da aikin, ko kuma na guje wa rikici, ko wani abu dabam - kuma wannan matakin sanin kai yana taimakawa wajen kiyaye kaina. Bayan wannan komai yana tafiya da sauƙi. Wani abu da na gano ba kawai a cikin kaina ba, har ma a cikin sauran masu shirya shirye-shirye shine rashin iya faɗin tunani yayin da kuke cikin yanayin damuwa. Misali, kuna zaune a wurin coding, a cikin yanayi na kwarara, sannan su zo wurin ku da gudu su fara kururuwa cikin damuwa cewa wani abu ya karye kuma yanzu za a dauki tsauraran matakai akan ku. Kuma ba za ku iya faɗi kalma ɗaya ba saboda kuna cikin yanayin damuwa. Ilimin da aka samu yana ba ku damar shirya don wannan lokacin, tsira da shi kuma ku ci gaba zuwa tsarin ja da baya, bayan haka zaku iya yin wani abu. Don haka a, lokacin da kuka fara fahimtar yadda duk yake aiki, babban lamari ne mai canza rayuwa. 
Ni kaina na kasa samun madaidaitan kalmomi, amma na tuna jerin ayyuka. Ma'anar ita ce, wannan amsa tana da yawa ta jiki kamar yadda ake magana, kuma kuna buƙatar sarari. Irin wannan sarari, a ma'anar Zen. Wannan shi ne ainihin abin da ya kamata a yi bayaninsa, sannan nan da nan ya koma gefe - kawai ta hanyar jiki. Lokacin da na yi shiru da baki, zan iya aiwatar da lamarin cikin motsin rai. Yayin da adrenaline ya isa kwakwalwar ku, ya canza ku cikin yaƙi ko yanayin jirgin, ba za ku iya ƙara cewa komai ba, a'a - yanzu kun kasance wawa, injiniyan bulala, ba za ku iya ba da amsa mai kyau ko ma dakatar da harin ba, kuma maharin yana da 'yanci. don kai hari akai-akai. Dole ne ka fara zama kanka kuma, dawo da iko, fita daga yanayin "yaƙi ko jirgin sama".

Kuma don wannan muna buƙatar sarari na magana. sarari kyauta kawai. Idan kun ce wani abu kwata-kwata, to, zaku iya faɗi daidai wannan, sannan ku je ku sami "sarari" da gaske don kanku: ku tafi yawo a wurin shakatawa, ku kulle kanku a cikin shawa - ba kome ba. Babban abu shine cire haɗin gwiwa daga wannan yanayin na ɗan lokaci. Da zaran ka kashe aƙalla ƴan daƙiƙa, sarrafawa ya dawo, za ka fara tunani cikin nutsuwa. "Ok, ni ba ɗan iska ba ne, ba na yin abubuwa marasa hankali, ni mutum ne kyakkyawa mai amfani." Da zarar kun sami damar shawo kan kanku, lokaci ya yi da za ku ci gaba zuwa mataki na gaba: fahimtar abin da ya faru. An kai muku hari, harin ya fito daga inda ba ku yi tsammani ba, rashin gaskiya ne, mummunan kwanto. Wannan ba daidai ba ne. Mataki na gaba shine fahimtar dalilin da yasa maharin ke buƙatar wannan. Da gaske, me ya sa? Wataƙila saboda shi kansa yana fushi? Me yasa ya hauka? Alal misali, domin ya ɓata kansa kuma ba zai iya ɗaukar nauyi ba? Wannan ita ce hanyar da za a bi a hankali duk yanayin. Amma wannan yana buƙatar ɗaki don motsa jiki, sararin magana. Mataki na farko shine katse magana ta baki. Ka guji tattaunawa da kalmomi. Soke shi, yi tafiya da sauri. Idan hira ce ta wayar tarho, kawai ka ajiye waya - wannan fasaha ce da na koya ta hanyar sadarwa da tsohuwar matata. Idan tattaunawar ba ta yi kyau ba, kawai a ce "bankwana" kuma a ajiye waya. Daga wancan gefen wayar: “blah blah blah”, kun amsa: “yeah, bye!” kuma ka kashe waya. Kai kawai ka gama magana. Bayan minti biyar, lokacin da ikon yin tunani mai hankali ya dawo gare ku, kun kwantar da hankali kadan, zai yiwu a yi tunanin komai, abin da ya faru da abin da zai faru a gaba. Kuma fara samar da amsa mai tunani, maimakon mayar da martani kawai saboda motsin rai. A gare ni, nasarar fahimtar kai shine ainihin gaskiyar cewa idan akwai damuwa a zuciya ba zan iya magana ba. Fita daga wannan hali, tunani da tsara yadda za a amsa da rama matsalolin - waɗannan matakan da suka dace a cikin lamarin lokacin da ba za ku iya magana ba. Hanya mafi sauƙi ita ce gudu daga halin da ake ciki wanda damuwa na zuciya ke bayyana kansa kuma kawai ya daina shiga cikin wannan damuwa. Bayan haka sai ka zama mai tunani, lokacin da za ka iya tunani, za ka iya yin magana, da sauransu.

Af, a kotu, lauya mai adawa ya yi ƙoƙari ya yi maka wannan - yanzu ya bayyana dalilin da ya sa. Domin yana da ikon danne ka har ya kai ga ba za ka iya furta sunanka ba, misali. A zahirin gaskiya, ba za ku iya magana ba. Idan haka ta faru da ku, kuma idan kun san cewa za ku sami kanku a wurin da ake fama da fadace-fadace, a wuri kamar kotu, to za ku iya zuwa da lauyanku. Lauyan zai tsaya a gare ku ya dakatar da kai harin, kuma zai yi shi ta hanyar doka gaba ɗaya, kuma sararin Zen da ya ɓace zai dawo gare ku. Alal misali, sai na kira iyalina sau biyu, alkali ya kasance da abokantaka game da wannan, amma lauyan da ke hamayya da shi ya yi kururuwa kuma ya yi mini tsawa, Ba zan iya samun kalma ba a hankali. A cikin waɗannan lokuta, yin amfani da matsakanci yana aiki mafi kyau a gare ni. Mai shiga tsakani yana dakatar da duk wannan matsin lamba da ke zubo muku a cikin rafi mai ci gaba, zaku sami sararin Zen da ake buƙata, kuma tare da shi ikon yin magana yana dawowa. Wannan fage ne na ilimi gaba ɗaya wanda akwai abubuwa da yawa da za a yi nazari a cikinsa, da yawa don ganowa a cikin kanku, kuma duk wannan ya juya zuwa manyan yanke shawara na dabarun da suka bambanta ga mutane daban-daban. Wasu mutane ba su da matsalolin da aka kwatanta a sama; yawanci, mutanen da ƙwararrun masu tallace-tallace ba su da su. Duk wadannan mutane da suke yin rayuwarsu da kalmomi - mashahuran mawaka, mawaka, malaman addini da 'yan siyasa, suna da abin da za su ce. Ba su da irin waɗannan matsalolin, amma ina.

Андрей: Ya kasance... ba zato ba tsammani. Madalla, mun riga mun yi magana da yawa kuma lokaci ya yi da za a kawo karshen wannan hirar. Tabbas za mu hadu a taron kuma za mu iya ci gaba da wannan tattaunawa. Mu hadu a Hydra!

Kuna iya ci gaba da tattaunawar ku tare da Cliff a taron Hydra 2019, wanda za a gudanar a Yuli 11-12, 2019 a St. Petersburg. Zai zo da rahoto "Kwarewar Ƙwararrun Ma'amalar Hardware na Azul". Ana iya siyan tikiti a kan gidan yanar gizon.

source: www.habr.com

Add a comment