Aturan praktis untuk utas adalah, Anda ingin setidaknya satu "aktif" (mampu menjalankan perintahnya segera diberikan waktu CPU) utas pekerja untuk setiap "unit eksekusi" yang tersedia di komputer. "Unit eksekusi" adalah salah satu prosesor instruksi logis, sehingga server quad-chip, quad-core Xeon hyperthreaded akan memiliki 32 EU (4 chip, 4 core per chip, masing-masing hyperthreaded). Core i7 rata-rata Anda akan memiliki 8.
Satu utas per UE adalah penggunaan daya CPU sepenuhnya, dengan ketentuan bahwa utas akan selalu dalam keadaan berjalan; ini hampir tidak pernah terjadi, karena utas membutuhkan akses ke memori yang tidak di-cache, hard disk, port jaringan, dll. yang harus mereka tunggu, dan yang tidak memerlukan perhatian CPU aktif untuk melakukan. Dengan demikian, Anda dapat lebih meningkatkan efisiensi secara keseluruhan dengan lebih banyak utas yang disiapkan dan siap untuk digunakan. Ini memang perlu biaya; ketika sebuah CPU mengganti sebuah thread, ia harus menyimpan cache dari register thread, pointer eksekusi dan info status lainnya yang biasanya disimpan di tempat kerja terdalam dari UE dan diakses dengan sangat cepat, memungkinkan UE lain dalam chip CPU untuk mengambilnya. Ini juga membutuhkan utas di OS untuk memutuskan utas mana yang harus dialihkan. Terakhir, ketika UE mengganti utas, kehilangan keuntungan kinerja pipelining yang digunakan kebanyakan arsitektur prosesor; itu harus menyiram pipa sebelum beralih benang. Tetapi, karena semua ini masih memakan waktu jauh lebih sedikit daripada rata-rata hanya menunggu hard drive atau bahkan RAM untuk kembali dengan informasi, itu sepadan dengan biayanya.
Namun, secara umum, setelah Anda melampaui dua kali jumlah utas "aktif" seperti UE, OS mulai menghabiskan lebih banyak utas penjadwalan waktu UE, dan UE menghabiskan lebih banyak waktu untuk beralih di antara mereka, daripada yang sebenarnya dihabiskan dengan menjalankan utas aktif program. Ini adalah titik skala diseconomies; sebenarnya akan memakan waktu lebih lama untuk menjalankan algoritma multithreaded jika Anda menambahkan utas tambahan pada saat ini.
Jadi, secara keseluruhan, Anda ingin mempertahankan setidaknya sebanyak utas dalam program Anda seperti halnya Anda memiliki UE di komputer, tetapi Anda ingin menghindari memiliki lebih dari dua kali lipat jumlah yang tidak menunggu atau tidur.