La versione breve: in assenza di circostanze insolite, dovresti usare una traversata a thread singolo. Come dice @CodesInChaos, è probabile che il tuo computer sia legato all'I / O in entrambe le fasi dell'attività: controllo delle dimensioni e caricamento allo stesso modo.
Provare a generare un thread per directory è una ricetta per bombardare a forcella la tua macchina nel dimenticatoio. Più precisamente, non ha senso invocare più thread di quanto sia necessario per saturare i colli di bottiglia delle prestazioni. Nota che ci sono 2 colli di bottiglia probabili: le prestazioni del tuo filesystem e le prestazioni del tuo collegamento di rete a Dropbox.
Per caricare i dati su Dropbox, la tua rete è quasi certamente il collo di bottiglia. Dovresti essere in grado di saturare qualsiasi collegamento a banda larga con un attraversamento a thread singolo.
Per trovare la dimensione del filesystem, il collo di bottiglia sarà anche I / O, ma i dettagli dipendono dal filesystem attuale. Per un'unità a stato solido, probabilmente non trarrai vantaggio da più di un singolo thread. Sospetto che si possa ottenere un modesto vantaggio da un numero limitato di thread in un file system a disco singolo, in quanto il sistema operativo può potenzialmente pianificare gli arresti di testa in modo un po 'più efficiente se ha una coda. La domanda è: un piccolo margine di prestazioni vale il costo di implementare e mantenere un'implementazione più complessa? (Ad esempio, gestire casi come più collegamenti fisici può essere abbastanza difficile con un'implementazione a thread singolo ...)
Un filesystem distribuito può trarre grandi benefici da una traversata multithread. Tuttavia, i dettagli su come estrarre le migliori prestazioni dipendono probabilmente dal sistema specifico.