PDA

Visualizza la versione completa : [c++] limitare la cpu di un processo


iacoposk8
15-02-2015, 11:08
Ciao a tutti!
in c++ sto creando un interfaccia grafica per un programma che esiste solo via linea di comando. questo programma esiste sia per linux, windows e osx, quindi vorrei creare un interfaccia compatibile per questi tre sistemi operativi.
quindi il mio programma lancerà un'altro programma e, fino a qua, non ci sono problemi. vorrei aggiungere una funzione: uno slider che permette di limitare l'uso della cpu del processo che lancio (il programma a linea di comando).
Ho cercato su google, ma ho solo trovato come limitare le risorse del programma corrente con l'uso del comando sleep, invece vorrei limitare l'uso di un processo lanciato dal programma corrente.
Mi vanno bene soluzioni in c++ (scelta che preferisco) ma anche in bash, batch ecc...
O in alternativa qualsiasi cosa.
grazie

oregon
15-02-2015, 11:20
Puoi solo impostare una bassa priorità per il processo (con Win). Non altro ...

iacoposk8
15-02-2015, 11:50
bassa priorità vuol dire che lui cerca sempre di andare al 100% o quello che gli serve, però se c'è un processo che ha bisogno del 50% il processo con bassa priorità gliela cede? giusto?
e come si fa? e si può fare anche per gli altri s.o?

Scara95
15-02-2015, 14:52
Sbaglio le premesse! L'obbiettivo è usare sempre il 100%. Poi si organizzano i processi secondo priorità in modo che i processi più importanti abbiano naturalmente più cpu. Una cpu non utilizzata sono soldi sprecati al momento dell'acquisto. Idealmente dovrebbe essere sempre al 100%.

MItaly
15-02-2015, 15:02
bassa priorità vuol dire che lui cerca sempre di andare al 100% o quello che gli serve, però se c'è un processo che ha bisogno del 50% il processo con bassa priorità gliela cede? giusto?
Concettualmente sì*, il modo in cui questo esattamente avviene dipende dall'algoritmo di scheduling impiegato (oltre al fatto che su Windows esistono classi di priorità "magiche" - ad esempio, idle, che schedula il processo quando veramente non ha nient'altro da fare). In alternativa, avendo a disposizione più core puoi impostare l'affinity del processo su uno solo di questi, ovvero imponi al sistema operativo di farlo girare solo su alcuni dei core a disposizione, lasciando sicuramente gli altri core liberi per altro.
Tutto questo è disponibile anche su altri sistemi operativi (per gli OS di famiglia Unix normalmente si parla di "nice value" per l'anti-boost di priorità).

---

* Anche se il concetto che un processo "ha bisogno del 50% di CPU" non ha molto senso. Di base semplicemente un processo può andare in wait (in attesa di qualcosa - IO su disco, socket di rete, eventi dalla GUI, timer, ...) o ritornare eseguibile quando il kernel si accorge che l'attesa è terminata. La percentuale del tempo di CPU effettivamente impiegato (mediata su un qualche periodo) dipende dalla durata delle wait e da quello che combinano le altre applicazioni.

iacoposk8
15-02-2015, 17:49
ok, questa soluzione allora è molto meglio di quello che avevo pensato io. perchè questo programma può arrivare in casi di basse prestazioni a saturare la cpu, in questo modo, mi pare di capire che la cpu sarà comunque saturata, ma l'utente non si accorgerà di un rallentamento delle sue solite attività, siccome il mio programma userà solo la cpu inutilizzata in pratica. e tecnicamente come posso fare questo?

Loading