Sobes.tech
Middle

Gdy jeden fizyczny rdzeń wykonuje dwa wątki, czy będzie to odbywać się synchronicznie czy równolegle?

sobes.tech AI

Odpowiedź od AI

To będzie się odbywać synchronicznie z punktu widzenia jednoczesnego wykonywania w tym samym mikro-momencie. Jeden fizyczny zasób (rdzeń) nie może wykonywać dwóch zadań całkowicie równocześnie.

System Android używa preemptive multitaskingu. Jądro przełącza się między wątkami, przydzielając każdemu małe kwanty czasu. Tworzy to iluzję równoległości (współbieżności).

// Przykład: preemptive multitasking
fun main() {
    val thread1 = Thread {
        for (i in 1..5) {
            println("Wątek 1: $i")
            Thread.sleep(10) // Symulacja pracy
        }
    }

    val thread2 = Thread {
        for (i in 1..5) {
            println("Wątek 2: $i")
            Thread.sleep(10) // Symulacja pracy
        }
    }

    thread1.start()
    thread2.start()
}

W powyższym przykładzie widzimy, że wyjście linii z obu wątków się przeplata, co demonstruje przełączanie kontekstu między nimi.

Pojęcia:

  • Równoległość: Równoczesne wykonywanie wielu zadań w tym samym momencie na wielu fizycznych CPU lub rdzeniach.
  • Synchronous / Współbieżność: Wykonywanie wielu zadań w określonym przedziale czasowym, gdy procesor szybko przełącza się między zadaniami, tworząc iluzję ich równoczesnego wykonywania.

Zatem na jednym rdzeniu dochodzi do synchronicznego (współbieżnego) wykonywania wielu wątków poprzez przełączanie kontekstu.