Thread menggunakan penjadwalan pre-emptive , sedangkan serat menggunakan penjadwalan kooperatif .
Dengan utas, aliran kontrol bisa terganggu kapan saja, dan utas lain dapat mengambil alih. Dengan beberapa prosesor, Anda dapat menjalankan semua utas sekaligus pada saat yang bersamaan ( multithreading simultan , atau SMT). Akibatnya, Anda harus sangat berhati-hati tentang akses data bersamaan, dan melindungi data Anda dengan mutex, semaphore, variabel kondisi, dan sebagainya. Seringkali sangat sulit untuk memperbaikinya.
Dengan serat, kontrol hanya beralih saat Anda menyuruhnya, biasanya dengan pemanggilan fungsi bernama sesuatu yield()
. Ini membuat akses data bersamaan lebih mudah, karena Anda tidak perlu khawatir tentang atomicity struktur data atau mutex. Selama Anda tidak menghasilkan, tidak ada bahaya preempted dan serat lain mencoba membaca atau memodifikasi data yang sedang Anda kerjakan. Namun, sebagai hasilnya, jika serat Anda masuk ke loop tak terbatas, tidak ada serat lain yang bisa berjalan, karena Anda tidak menghasilkan.
Anda juga dapat mencampur benang dan serat, yang menimbulkan masalah yang dihadapi oleh keduanya. Tidak disarankan, tetapi kadang-kadang bisa menjadi hal yang benar untuk dilakukan jika dilakukan dengan hati-hati.