Skip to content

lintaba/kp-interview-go

Repository files navigation

Go GitHub go.mod Go version of a Go module Maintenance Docker

Factorizer

This is a test / interview implementation, written in go. Author's kinda first go project. Just move on.


Számok Faktorializálása

A faktorizálás egyszerre több magon zajlik, az eredmények sorrendben érkeznek vissza. A faktorizáló viselkedése több ponton is befolyásolható, pl teszteléshez. A kiszámolandó számokat véletlenszerűen generáljuk, és az eredményeket alapértelmezés szerint kiírjuk az alábbi formátumban:

4.: 3! = 6, isOdd=false

A kiszámított érték esetenként kifejezetten nagy is lehet.

Architektúra

A rendszer az alábbi komponensekből épül fel, melyet a main indít.

Mermaid markup
flowchart LR
    main[[main.go]] --> factorizer[Factorizer.go] --> pc(parityChecker.go)

A faktorizálást párhuzamosan végzi cpuszám+1 gorutin.

Inizializálás(StartWorkers) során létrehozza ezeket a rutinokat, melyek párhuzamosan várnak inputra, és párhuzamosan írják vissza az outputot. A workerek egymásról nem tudnak, egymásra nem várnak. Az inicializátor további feladata, hogy a kapott feladatokat áttranszformálja egy olyan formátummá, ami utána sorrendtartóan olvasható, és ezt adja át a feldolgozó egységeknek.

Mermaid markup
flowchart TB
    wm("StartWorkers(workerCount, inputChan, outputChanChan)")
    wm -->  aw1(go asyncWorkerJobRunner 1) --> w1(go asyncWorker)
    wm -->  aw2(go asyncWorkerJobRunner 2) --> w2(go asyncWorker)
    wm -->  aw3(go asyncWorkerJobRunner ...) --> w3(go asyncWorker)
    wm -->  aw4(go asyncWorkerJobRunner n) --> w4(go asyncWorker)
    wm ==> asyncTransformInputToIoChan
    

Az asyncWorkerJobRunner dolga, hogy figyelje az új feldolgozandókat, elindítsa és leállítsa az asyncWorker-t, figyelje az eltelt időket, és az alapján timeoutolja a feldolgozást.

Az asyncWorker végzi a szükséges matematikai művelet elvégzését. (Esetünkben faktoriális számítást.) Érvénytelen bemenetre pánikol. Futása megszakítható. Az eredményt channelbe írja vissza.

Az asyncTransformInputToIoChan transzformálja a bemeneti folymatot egy olyan struktúrába, ami két elemet tartalmaz: az megoldandó feladatot, és egy, a megoldást váró channelt. A megoldást váró channelt elküldi a kimenet channelbe is, így a bemenettel garantáltan azonos sorrendben jön létre egy kimeneti channelt tartalmazó channel. Az egyes al-elemekre így már lehet várni, és azok az eredmény elkészülte után lesznek olvashatóak.

Alapértelmezés szerint a konfigurációnak megfelelő bemenetet generál, és a generált sorrendben írja ki. A kiírást a parityChecker, C-ben írt paritás-ellenörzőn is átfuttatja, amivel kibővíti az eredmény-sort.

Refs

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published