Bonjour tous le monde,
j'ai toujours entendu que le context switch s'effectue lors d'une operation I/O, ou un synchronised/lock ou chagement de priorite du thread etc.
Dans mon exemple ci dessous, n'ayant que 4 cores disponibles sur mon ordinateur je m'attends a ce que seulement 4 threads sur 5 soit en etat "running" et que le 5 eme ne soit jamais execute et pourtant tous les 5 ont ce meme etat.
J'en conclu donc qu'il y a bien des context switchs entre mes 5 threads.
Mes questions sont donc :
1. Pourquoi l'OS effectue tout de meme un context switch sachant que je n'ai ni I/O, ni synchronized etc ?
2. On a l'habitude dans certain cas bien precis d'utiliser un spin lock pour eviter les contexts switch mais j'en conclu que ce n'est donc pas fiable ?
3. J'ai lu quelque part que l'OS a partir d'un certain nombre de temps dans un spin lock effectue tous de meme un context switch ? qu'en pensez vous ?
4. Une de mes hypothese est que un core puisse en faite execute plus que un thread et que le context switch s’effectue entre les tasks d’un meme core? Cela ne m’explique toujours pas que est ce que le trigger de ce context switch?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public class Tester { public static final int NUMBER_OF_THREADS = 5; public static void main(String[] args) { Runnable r = () -> { int i = 0; while (true) { int i = 1 + 1; } }; for (int i = 0; i < NUMBER_OF_THREADS; i++) { Thread t = new Thread(r, "Thread_" + i); t.start(); } } }
Partager