2014-04-15 12 views
6

Sono po 'confuso b/w workqueues e il processo kthread quando vengono creati come seguenti-differenza b/w processo kthread e workqueues

Crea processo kthread per ogni CPU online e legarsi a 1 CPU unica

for_each_online_cpu(cpu) { 
    kthread = kthread_create(func, ...); 
    kthread_bind(kthread, cpu); 
} 
//Each kthread will process work in serialized manner 

Creare WorkQueue vincolato per ogni CPU online con @max_active come 1

for_each_online_cpu() { 
    wq = alloc_workqueue(name, WQ_MEM_RECLAIM, 1) 
} 
// queue_work_on(cpu, work) will ensure the works queued on a particular CPU are 
    processed in a serialized manner. 

per favore fatemi sapere se la mia comprensione è corretta e quali sono i vantaggi del processo kthread oltre workqueues e v ice-versa.

Grazie in anticipo.

risposta

5

"Lavoro" è un'azione che dovrebbe essere completata in un tempo ragionevole. Sebbene possa dormire, non dovrebbe farlo per molto tempo, perché più elementi di lavoro condividono lo stesso thread di lavoro.

Un thread è il tuo in esecuzione per tutto il tempo che vuoi. Non è necessario tornare ad alcuni chiamanti per fare altro lavoro, quindi puoi metterlo in un ciclo (e di solito è fatto). Il ciclo può contenere sleep arbitrari.

Le code di lavoro vengono utilizzate in situazioni in cui il chiamante non è in grado di eseguire l'azione desiderata, ad esempio perché è una routine di servizio di interruzione e il lavoro è troppo lungo per un interrupt o è comunque inappropriato per l'esecuzione in un interrupt (perché richiede un contesto di processo).

3

Per prima cosa, Workqueue è anche un kthread. Ora Se stai usando la coda di default, dichiarerai la funzione di lavoro e schedule_work() , che a sua volta aggiungerà la tua funzione di lavoro al workqueue predefinito per quel processore. Questa workqueue predefinita non è altro che un kthread che è stato creato in quel momento di avvio.

Ora, a proposito del vantaggio e dello svantaggio, workqueue viene utilizzato in uno scenario molto specifico: quando si desidera ritardare il lavoro per un secondo momento. Come @Kaz ha menzionato una delle situazioni potrebbe essere quando si è in interrupt handler e vuole uscire il prima possibile. Quindi con workqueue è possibile pianificare il lavoro in un secondo momento, mentre il normale kthread non può essere ritardato.

Problemi correlati