Anda tidak mengajukan pertanyaan yang lebih mendasar, "Bagaimana saya bisa memiliki 290 proses ketika CPU saya hanya memiliki empat core?" Jawaban ini sedikit sejarah, yang mungkin membantu Anda memahami gambaran besarnya, meskipun pertanyaan spesifik telah dijawab. Karena itu, saya tidak akan memberikan versi TL; DR.
Sekali waktu (pikirkan, tahun 1950-an -60-an), komputer hanya bisa melakukan satu hal pada satu waktu. Kamar-kamar itu sangat mahal, memenuhi seluruh ruangan, dan kami membutuhkan cara untuk memanfaatkannya secara efisien dengan membagikannya di antara banyak orang. Cara pertama untuk melakukan ini adalah pemrosesan batch , di mana pengguna akan mengirimkan tugas ke komputer dan mereka akan antri, dieksekusi satu demi satu dan hasilnya akan dikirim kembali ke pengguna. Itu baik-baik saja tetapi itu berarti bahwa, jika Anda ingin melakukan perhitungan yang akan memakan waktu beberapa hari, tidak ada orang lain yang dapat menggunakan komputer selama waktu itu.
Inovasi berikutnya (pikirkan, 1960-an-70-an) adalah pembagian waktu . Sekarang, alih-alih menjalankan seluruh satu tugas, lalu seluruh tugas berikutnya, komputer akan menjalankan sedikit satu tugas, lalu menjeda dan menjalankan sedikit tugas berikutnya, dan seterusnya. Dengan demikian, komputer akan memberi kesan bahwa ia menjalankan beberapa proses secara bersamaan. Keuntungan besar dari ini adalah bahwa sekarang Anda dapat menjalankan perhitungan yang akan memakan waktu beberapa hari dan, meskipun sekarang akan memakan waktu lebih lama, karena terus terputus, orang lain masih dapat menggunakan mesin selama waktu itu.
Semua ini untuk komputer besar gaya mainframe. Ketika komputer pribadi mulai menjadi populer, mereka pada awalnya tidak terlalu kuat dan, hei, karena mereka pribadi sepertinya OK bagi mereka untuk hanya dapat melakukan satu hal & nbdp; - menjalankan satu aplikasi - sekaligus (pikirkan, 1980-an). Tetapi, ketika mereka menjadi lebih kuat (pikirkan, tahun 1990-an untuk mempresentasikan), orang-orang menginginkan komputer pribadi mereka untuk berbagi waktu juga.
Jadi kami berakhir dengan komputer pribadi yang memberikan ilusi menjalankan beberapa proses secara bersamaan dengan benar-benar menjalankannya satu per satu untuk periode yang singkat dan kemudian menghentikannya. Utas pada dasarnya adalah hal yang sama: pada akhirnya, orang menginginkan bahkan proses individual untuk memberikan ilusi melakukan banyak hal secara bersamaan. Pada awalnya, penulis aplikasi harus mengatasinya sendiri: menghabiskan sedikit waktu memperbarui grafik, berhenti sebentar, menghabiskan sedikit waktu menghitung, berhenti sebentar, menghabiskan sedikit saat melakukan sesuatu yang lain, ...
Namun, sistem operasi sudah baik dalam mengelola beberapa proses, masuk akal untuk memperluasnya untuk mengelola sub-proses ini, yang disebut utas. Jadi, sekarang, kami memiliki model di mana setiap proses (atau aplikasi) berisi setidaknya satu utas, tetapi beberapa berisi beberapa atau banyak. Masing-masing utas ini berhubungan dengan subtugas yang agak independen.
Namun, pada level teratas, CPU masih hanya memberikan ilusi bahwa semua thread ini berjalan pada saat yang bersamaan. Pada kenyataannya, ini menjalankan satu untuk sedikit, menjeda, memilih yang lain untuk berjalan sedikit, dan seterusnya. Kecuali bahwa CPU modern dapat menjalankan lebih dari satu utas sekaligus. Jadi, dalam kenyataan yang sebenarnya , sistem operasi memainkan permainan "lari sebentar, berhenti sebentar, jalankan sesuatu yang lain sebentar, berhenti sebentar" pada semua inti secara bersamaan. Jadi, Anda dapat memiliki utas sebanyak yang Anda (dan perancang aplikasi) inginkan tetapi, setiap saat, semua kecuali beberapa dari mereka akan dijeda.