Bonjour à tous,
Je voudrais comprendre les grands principes de la façon dont le système attribue les tranches de temps, dans le but d’en tirer le meilleur parti.
Par exemple :
En supposant qu’on ait 16 tâches monothread, similaires et indépendantes à réaliser, très coûteuses en temps CPU mais pas gourmandes en autres ressources système (peu de besoin en mémoire ou en I/O, etc…), qu’est-ce qui aura terminé son travail le plus vite entre :
- 1 process à 16 threads ;
- 16 process à 1 thread ;
- 4 process à 4 threads.
???
Contexte : 1) hormis ces 16 tâches, le système a déjà plein d’autres encours (pour fixer les idées, disons qu’il a N autres process qui travaillent : autres applications, daemons, …)
2) le nombre de cores est petit devant 16
3) on ne joue pas avec le nice
Je me dis que : si le système attribue d’abord une tranche de temps à chaque process, puis s’il répartit ensuite chacune de ces tranches entre les threads du process, alors 16 process devraient finir leur travail plus vite que 16 threads dans un même process… puisque mes tâches auront 16/(N+16) chances de tourner à un instant donné, alors qu’un seul process à 16 threads en aurait 1/(N+1)…
Est-ce que ça se passe comme ça ?
Quels sont les grands principes de cette allocation de temps ?
Merci d’avance pour vos éclaircissements
Pehachem