Adakah yang bisa menjelaskan perbedaan antara garpu dan utas?
sumber
Adakah yang bisa menjelaskan perbedaan antara garpu dan utas?
Sebuah garpu memberi Anda proses baru, yang merupakan salinan dari proses saat ini, dengan segmen kode yang sama. Saat gambar memori berubah (biasanya ini karena perilaku yang berbeda dari dua proses) Anda mendapatkan pemisahan gambar memori (Salin Saat Menulis), namun kode yang dapat dijalankan tetap sama. Tugas tidak berbagi memori kecuali mereka menggunakan beberapa primitif Inter Process Communication (IPC) .
Satu proses dapat memiliki banyak utas, masing-masing dijalankan secara paralel dalam konteks proses yang sama. Memori dan sumber daya lain dibagikan di antara utas, oleh karena itu data bersama harus diakses melalui beberapa objek primitif dan sinkronisasi (seperti mutex , variabel kondisi , dan semaphore ) yang memungkinkan Anda menghindari kerusakan data.
Garpu
Fork tidak lain adalah proses baru yang terlihat persis seperti proses lama atau proses induk tetapi masih merupakan proses yang berbeda dengan ID proses yang berbeda dan memiliki memori sendiri. Proses induk membuat ruang alamat terpisah untuk anak. Proses induk dan anak memiliki segmen kode yang sama, tetapi dijalankan secara independen satu sama lain.
Contoh paling sederhana dari forking adalah ketika Anda menjalankan perintah pada shell di Unix / Linux. Setiap kali pengguna mengeluarkan perintah, shell melakukan fork pada proses anak dan tugas selesai.
Ketika panggilan sistem fork dikeluarkan, salinan dari semua halaman yang sesuai dengan proses induk dibuat, dimuat ke lokasi memori terpisah oleh OS untuk proses anak, tetapi dalam kasus tertentu, ini tidak diperlukan. Seperti dalam panggilan sistem 'exec', tidak perlu menyalin halaman proses induk, karena execv menggantikan ruang alamat dari proses induk itu sendiri.
Beberapa hal yang perlu diperhatikan tentang forking adalah:
Benang
Utas adalah Proses Berat Ringan (LWP). Secara tradisional, utas hanyalah status CPU (dan beberapa status minimal lainnya) dengan proses yang berisi sisanya (data, tumpukan, I / O, sinyal). Thread membutuhkan lebih sedikit overhead daripada "forking" atau menelurkan proses baru karena sistem tidak menginisialisasi ruang dan lingkungan memori virtual sistem baru untuk proses tersebut. Meskipun paling efektif pada sistem multiprosesor di mana aliran proses dapat dijadwalkan untuk berjalan pada prosesor lain sehingga memperoleh kecepatan melalui pemrosesan paralel atau terdistribusi, keuntungan juga ditemukan pada sistem uniprosesor yang mengeksploitasi latensi di I / O dan fungsi sistem lainnya yang dapat menghentikan proses eksekusi.
Untaian dalam proses yang sama berbagi:
Detail selengkapnya dapat ditemukan di sini .
sumber
Jawaban Dacav sangat bagus, saya hanya ingin menambahkan bahwa tidak semua model threading memberi Anda multi-pemrosesan yang sebenarnya.
Misalnya, implementasi threading default Ruby tidak menggunakan utas OS / kernel yang sebenarnya. Sebaliknya itu meniru memiliki beberapa utas dengan beralih antara objek Thread dalam satu utas / proses kernel.
Ini penting pada sistem multiprosesor / multi-inti, karena jenis utas ringan ini hanya dapat berjalan pada satu inti - Anda tidak akan mendapatkan banyak peningkatan kinerja karena memiliki banyak utas.
Tempat lain yang membuat perbedaan ini adalah ketika satu thread memblokir (menunggu di I / O atau memanggil IOCTL driver), semua Thread memblokir.
Hal ini tidak terlalu umum saat ini - sebagian besar implementasi threading menggunakan utas kernel yang tidak mengalami masalah ini - tetapi sangat berharga untuk diperhatikan untuk kelengkapan.
Sebaliknya, fork memberi Anda proses lain yang dapat dijalankan secara bersamaan di CPU fisik lain saat proses aslinya sedang dijalankan. Beberapa orang menganggap IPC lebih cocok untuk aplikasi mereka, yang lain lebih suka threading.
Semoga berhasil dan selamat bersenang - senang! Multi-threading menantang dan bermanfaat.
sumber
Utas adalah fungsi yang dijalankan secara paralel, garpu adalah proses baru dengan warisan orang tua. Utas bagus untuk menjalankan tugas secara paralel, sedangkan garpu adalah proses independen, yang juga berjalan secara bersamaan. Thread memiliki kondisi balapan dan ada kontrol semaphore dan lock atau mutex, pipa dapat digunakan di garpu dan thread.
sumber