Nanosekundes, mikrosekundes un milisekundes — skaidrojums ar reāliem piemēriem

Lielākajai daļai cilvēku ir intuitīva izjūta par sekundēm, minūtēm un stundām. Taču zemsekundes laika vienības — milisekundes, mikrosekundes un nanosekundes — ir tā vieta, kur dzīvo skaitļošana, tīkli un precīzie mērījumi. Tās nav tikai “mazākas sekundes” versijas: katra vienība atbilst pilnīgi citam aktivitāšu mērogam, un sajaukšana nepareizā kontekstā var būt atšķirība starp ātru sistēmu un tādu, kas vienkārši nestrādā.

Laika konvertētājs pārrēķina visas laika vienības, tostarp milisekundes un sekundes. Šajā rakstā detalizēti izskaidrotas zemsekundes vienības: ko tās mēra, kā tās savstarpēji saistās un kur tās parādās praksē.

Vienības un to savstarpējās attiecības

Sākot no sekundes un ejot “uz leju”:

VienībaSimbolsDaļa no sekundes10 pakāpe
Milisekundems1/1,00010⁻³
Mikrosekundeµs1/1,000,00010⁻⁶
Nanosekundens1/1,000,000,00010⁻⁹
Pikosekundeps1/1,000,000,000,00010⁻¹²

Katrs solis ir tieši 1,000× mazāks. 1 milisekunde = 1,000 mikrosekundes. 1 mikrosekunde = 1,000 nanosekundes. Tātad 1 milisekunde = 1,000,000 nanosekundes.

Lai saprastu 1 nanosekundes mērogu: gaisma 1 nanosekundē nolido aptuveni 30 centimetrus (apmēram 1 pēdu). Laikā, kurā gaisma šķērso istabu (apmēram 10 nanosekundes), mūsdienu CPU var izpildīt 10–30 instrukcijas.

Milisekundes (ms): cilvēka mēroga skaitļošana

Milisekunde ir 1/1,000 sekundes. Šajā mērogā tehnoloģijā sāk “justies” cilvēka uztvere.

Cilvēka reakcijas laiks uz vizuālu stimulu vidēji ir 150–250 ms. Tas nosaka “momentāni” slieksni lietotāja saskarnēs — zem 100 ms šķiet uzreiz, 100–300 ms ir pamanāms, bet pieņemams, un virs 300 ms lietotājs jau uztver aizturi.

Tīmekļa lapu ielāde tiek mērīta milisekundēs. Lapa, kas ielādējas 500 ms laikā, šķiet ātra; 2,000 ms (2 sekundes) sāk šķist lēni. Google Core Web Vitals mērķis Largest Contentful Paint ir zem 2,500 ms.

Tīkla latentums datu centrā parasti ir 1–5 ms. Starpkontinentāls latentums (Ņujorka → Londona) bieži ir 70–90 ms. Ņujorka → Tokija — ap 150–170 ms. Šie skaitļi nosaka minimālo iespējamo tīkla operācijas laiku neatkarīgi no servera ātruma.

Datu bāzes vaicājumi labi optimizētās sistēmās bieži beidzas 1–50 ms laikā. 500 ms vaicājums ir lēns; virs 1,000 ms (1 sekundes) parasti jau ir problēma.

Audio buferi mūzikas programmatūrā tiek iestatīti milisekundēs. 10 ms buferis dod 10 ms aizturi starp nots nospiešanu un dzirdamo skaņu — praktiski nemanāmi. 50 ms buferis, spēlējot instrumentu “dzīvajā”, jau ir jūtams. Daudzas ieraksta sistēmas mērķē uz 5–20 ms.

Kadru laiks spēlēs ir milisekundes uz kadru: 60 fps nozīmē vienu kadru ik pēc 16.67 ms. 120 fps — ik pēc 8.33 ms. Tieši kadru laikā spēļu izstrādātāji parasti mēra veiktspēju.

Mikrosekundes (µs): tīkli un kodola (kernel) laiks

Mikrosekunde ir 1/1,000,000 sekundes — 1,000 reizes mazāka par milisekundi. Šeit notiek augstas veiktspējas skaitļošana, zema latentuma tīkli un operētājsistēmu iekšējie procesi.

Augstfrekvences tirdzniecība (HFT) darbojas mikrosekundēs. Ko-lokētās sistēmas biržās bieži sasniedz 1–10 µs round-trip latentumu. Priekšrocība 100 µs var nozīmēt miljonus ātrajos tirgos.

SSD piekļuves laiks nejaušiem lasījumiem parasti ir 50–150 µs. Salīdzinājumam: HDD tas bieži ir 5–10 ms (tūkstoškārt lēnāk).

Operētājsistēmas konteksta pārslēgšana (context switch) var būt mikrosekundēs. Arī daudzās augsta līmeņa programmās “maza” darbība var izmaksāt desmitiem µs, ja iet caur sistēmas izsaukumiem vai bloķēšanu.

Tīkla buferēšana un paketēšana datu centrā bieži notiek mikrosekundēs. Lai gan signāla izplatīšanās aizture ir nanosekundēs, rindas, steki un apstrāde ātri uzkrāj µs.

Ethernet kadra pārraide pie 10 Gbps 1,500 baitu kadram ir apmēram 1 µs. Savukārt signāla ceļošanas aizture starp divām ierīcēm vienā datu centra statīvā var būt 100–500 ns.

Nanosekundes (ns): aparatūras līmeņa laiks

Nanosekunde ir 1/1,000,000,000 sekundes — 1,000 reizes mazāka par mikrosekundi. Šajā mērogā gaismas ātrums kļūst par reālu ierobežojumu.

CPU takts cikli ir nanosekundēs. 3 GHz procesors veic vienu ciklu ik pēc 0.33 ns. Viena instrukcija bieži aizņem 1–4 ciklus (0.33–1.3 ns) mūsdienu “pipelined” CPU.

CPU kešatmiņas piekļuves laiki:

  • L1 kešatmiņa: ~1 ns (2–4 cikli)
  • L2 kešatmiņa: ~4 ns (10–15 cikli)
  • L3 kešatmiņa: ~10–40 ns (30–100 cikli)
  • RAM: ~50–100 ns (150–300 cikli)

Tāpēc kešatmiņas dizains ir kritiski svarīgs veiktspējai — programma, kas “ietilpst” L1 kešatmiņā, strādā dramatiski ātrāk nekā tāda, kas regulāri “krīt” uz RAM.

Atmiņas kopnes ātrumi bieži tiek raksturoti ar nanosekundēm. DDR5 cikla laiks ir ap 0.625 ns (efektīvs ātrums 6,400 MT/s). Laika parametri kā “CL16” nozīmē CAS latentumu 16 ciklu apmērā.

Tīkla kabeļi un PCIe signāla izplatīšanās aizture ir nanosekundēs. Signāls varā ceļo apmēram ar 2/3 no gaismas ātruma — aptuveni 20 cm/ns. 1 metra kabelis pievieno apmēram 5 ns aiztures.

GPS laika sinhronizācija prasa nanosekunžu precizitāti. Satelītiem jāsaskaņo pulksteņi ap 20–30 ns robežās, lai iegūtu metru līmeņa precizitāti. Tikai 10 ns kļūda laikā nozīmē apmēram 3 metru kļūdu pozīcijā.

Pārrēķini starp zemsekundes vienībām

Pārrēķini seko 1,000× modelim:

NoUzReizināt ar
SekundesMilisekundes× 1,000
MilisekundesSekundes÷ 1,000
MilisekundesMikrosekundes× 1,000
MikrosekundesMilisekundes÷ 1,000
MikrosekundesNanosekundes× 1,000
NanosekundesMikrosekundes÷ 1,000
SekundesNanosekundes× 1,000,000,000

Bieži pārrēķini:

  • 1 sekunde = 1,000 ms = 1,000,000 µs = 1,000,000,000 ns
  • 100 ms = 100,000 µs = 100,000,000 ns
  • 50 µs = 0.05 ms = 50,000 ns
  • 500 ns = 0.5 µs = 0.0005 ms

Ja jāiet no šīm vienībām līdz minūtēm, stundām un dienām, Laika konvertētājs to izdara automātiski.

Kāpēc precizitāte kodā ir svarīga

Programmējot ar “timestamps” un laika mērījumiem, vienību sajaukšana ir biežs kļūdu avots. Tipiskākie gadījumi:

Sekundes vs milisekundes API. Unix timestamps ir sekundēs; JavaScript Date.now() atgriež milisekundes. Iedodot milisekundes tur, kur gaida sekundes, iegūsi datumus ap 2527. gadu; iedodot sekundes tur, kur gaida milisekundes, iegūsi 1970. gada janvāri.

“Aizmigšana” uz nepareizu laiku. Python time.sleep(1) guļ 1 sekundi. Dažos ietvaros analogs izsaukums gaida milisekundes vai mikrosekundes. Vienmēr pārbaudi dokumentāciju, kādās vienībās ir parametri.

Veiktspējas mērījumu kļūdas. Ja “benchmarko” ar taimeri, kam ir milisekunžu izšķirtspēja, bet darbības ilgst 10–50 µs, mērījumi būs bezjēdzīgi — vajag augstāku izšķirtspēju. Python time.perf_counter() un JavaScript performance.now() sniedz zem-milisekunžu precizitāti.

Nepareizi iestatīts tīkla timeout. Timeout 100 vienā bibliotēkā var nozīmēt 100 milisekundes, citā — 100 sekundes. 100 sekundes tīmekļa pieprasījumam ir ļoti ilgi; 100 ms var būt par īsu datu bāzes vaicājumam zem slodzes.

Pareiza vienība nav pedantisms — tā ir atšķirība starp sistēmu, kas uzvedas pareizi, un tādu, kas kļūdās klusi un ir grūti atkļūdojama.