Logo na Zephyrnet

Shin Tsarin Hankalinku Na Bututun Bash Ba daidai bane?

kwanan wata:

[Michael Lynch] ya ci karo da wani bakon yanayi. Me yasa yake tattarawa sannan yana tafiyar da shirinsa kusan 10x sauri fiye da gudanar da shirin da kanta? [Michael] ya shiga cikin wannan batu yayin da yake tantance aikin shirye-shirye, ya misalta shi zuwa abubuwan da ake bukata don maimaitawa da bincike, kuma ya gano cewa ya nuna kuskuren tsarin tunani na yadda bututun bash ke aiki.

Ga halin da ake ciki. Abu na farko da shirin na [Michael] ke yi shi ne fara mai ƙidayar lokaci. Sa'an nan kawai ya karanta kuma ya ƙidaya wasu bytes daga stdin, sannan ya buga tsawon lokacin da hakan ya faru. Lokacin gudanar da shirin gwaji ta hanya mai zuwa, yana ɗaukar kusan 13 micro seconds.

$ echo '00010203040506070809' | xxd -r -p | zig build run -Doptimize=ReleaseFast
bytes: 10
execution time: 13.549µs

Lokacin gudanar da shirin (wanda aka riga aka haɗa) kai tsaye, lokacin aiwatarwa ya kumbura zuwa 162 micro seconds.

$ echo '00010203040506070809' | xxd -r -p | ./zig-out/bin/count-bytes
bytes: 10
execution time: 162.195µs

Bugu da ƙari, kawai bambanci tsakanin zig build run da kuma ./zig-out/bin/count-bytes shine na farko ya tattara lambar, sannan nan da nan ya gudanar da shi. Na biyu yana tafiyar da shirin da aka haɗa kawai.

Ta yaya za a iya ƙara ƙarin matakin tarawa ragewa lokacin kisa? Ya nuna cewa tsarin tunanin [Michael] na yadda aikin bututun bututun bai yi daidai ba, kuma ya yi babban aiki na bayyana yadda suke a zahiri aiki, da kuma dalilin da ya sa wannan ya haifar da m hali yana gani.

A taƙaice, ba a ƙaddamar da umarni a cikin bututun bash bi da bi. Ana ƙaddamar da su duka a lokaci guda kuma ana aiwatar da su a layi daya. Wannan yana nufin cewa lokacin da aka kunna kai tsaye, shirin byte-counter na [Michael] ya ƙaddamar nan da nan. Sa'an nan kuma ya jira a kusa da yin kome da yawa na kusan 150 microsecond yayin da echo '00010203040506070809' | xxd -r -p wani bangare na bututun ya kai ga isar da bayanansa domin shirin ya karanta. Wannan shi ne inda ƙarin lokacin aiwatarwa ke fitowa yayin gudanar da sigar da aka riga aka haɗa.

Don haka me yasa harhada shi ke fara gudu cikin sauri? Dalilin asali guda ɗaya: lokacin da zig build run umarni ya fara, yana ɗaukar ɗan lokaci kaɗan don fara tattara shirin. Sannan lokacin da aka ƙaddamar da shirin a zahiri (kuma ya fara lokacin aiwatarwarsa), bayanan shigar da bututun bash sun riga sun shirya. Don haka, shirin da aka haɗa sabo yana aiki cikin ɗan lokaci kaɗan saboda ba ya zama yana jiran bayanai daga farkon bututun don samuwa.

Abu ne mai ban sha'awa kallon yadda bututun bash ke aiki a zahiri a ƙarƙashin kaho, kuma muna jin daɗin cikakken dalla-dalla [Micheal] ya sanya cikin duka tafiya da bayani. Ba dade ko ba jima, cikakkun bayanai irin wannan shuka suna tashi kuma suna haifar da wasu gira su ɗaga, kamar mai amfani wanda ya gano matsalolin gefen matsala game da sarari a cikin umarnin ssh.

tabs_img

Sabbin Hankali

tabs_img