Pertanyaan Apa perbedaan antara proses dan utas?


Apa perbedaan teknis antara proses dan utas?

Saya mendapatkan perasaan kata seperti 'proses' yang digunakan secara berlebihan dan ada juga benang perangkat keras dan perangkat lunak. Bagaimana dengan proses ringan dalam bahasa seperti Erlang? Adakah alasan definitif untuk menggunakan satu istilah di atas yang lain?


1225
2017-10-14 09:13


asal


Jawaban:


Kedua proses dan benang merupakan urutan eksekusi independen. Perbedaan umumnya adalah bahwa benang (dari proses yang sama) berjalan dalam ruang memori bersama, sementara proses berjalan di ruang memori terpisah.

Saya tidak yakin apa benang "perangkat keras" vs "perangkat lunak" yang mungkin Anda maksud. Thread adalah fitur lingkungan operasi, bukan fitur CPU (meskipun CPU biasanya memiliki operasi yang membuat benang efisien).

Erlang menggunakan istilah "proses" karena tidak mengekspos model multiprogramming memori bersama. Memanggil mereka "utas" berarti bahwa mereka telah berbagi ingatan.


1111
2017-10-14 09:15



Proses
Setiap proses menyediakan sumber daya yang dibutuhkan untuk menjalankan suatu program. Sebuah proses memiliki ruang alamat virtual, kode yang dapat dieksekusi, pegangan terbuka untuk objek sistem, konteks keamanan, pengidentifikasi proses yang unik, variabel lingkungan, kelas prioritas, ukuran pengaturan kerja minimum dan maksimum, dan setidaknya satu thread eksekusi. Setiap proses dimulai dengan satu utas, sering disebut utas utama, tetapi dapat membuat untaian tambahan dari setiap utasnya.

Benang
Thread adalah entitas dalam proses yang dapat dijadwalkan untuk eksekusi. Semua utas proses berbagi ruang alamat virtual dan sumber daya sistem. Selain itu, setiap utas mempertahankan penangan pengecualian, prioritas penjadwalan, penyimpanan lokal utas, pengenal untaian unik, dan sekumpulan struktur yang akan digunakan sistem untuk menyimpan konteks utas sampai dijadwalkan. Konteks thread termasuk rangkaian register mesin, tumpukan kernel, blok lingkungan ulir, dan tumpukan pengguna di ruang alamat dari proses thread. Thread juga dapat memiliki konteks keamanan mereka sendiri, yang dapat digunakan untuk meniru identitas klien.


Menemukan ini di MSDN di sini:
Tentang Proses dan Thread 

Microsoft Windows mendukung multitasking preemptif, yang menciptakan efek eksekusi simultan beberapa utas dari beberapa proses. Pada komputer multiprosesor, sistem dapat secara bersamaan menjalankan sebanyak mungkin benang karena ada prosesor di komputer.


634
2017-10-14 09:43



Proses:

  • Contoh pelaksanaan program disebut proses.
  • Beberapa sistem operasi menggunakan istilah 'tugas' untuk merujuk ke program yang sedang dijalankan.
  • Suatu proses selalu disimpan dalam memori utama yang diistilahkan sebagai memori utama atau memori akses acak.
  • Oleh karena itu, suatu proses disebut sebagai entitas aktif. Ini menghilang jika mesin di-boot ulang.
  • Beberapa proses mungkin terkait dengan program yang sama.
  • Pada sistem multiprosesor, beberapa proses dapat dijalankan secara paralel.
  • Pada sistem uni-processor, meskipun paralelisme yang sebenarnya tidak tercapai, algoritma penjadwalan proses diterapkan dan prosesor dijadwalkan untuk mengeksekusi setiap proses satu per satu waktu menghasilkan ilusi konkurensi.
  • Contoh: Menjalankan beberapa contoh program ‘Kalkulator’. Masing-masing contoh diistilahkan sebagai sebuah proses.

Benang:

  • Thread adalah bagian dari proses.
  • Ini disebut sebagai 'proses ringan', karena mirip dengan proses nyata tetapi mengeksekusi dalam konteks proses dan berbagi sumber daya yang sama yang dialokasikan untuk proses oleh kernel.
  • Biasanya, sebuah proses hanya memiliki satu utas kontrol - satu set instruksi mesin yang dijalankan pada suatu waktu.
  • Sebuah proses juga dapat terdiri dari beberapa utas eksekusi yang mengeksekusi instruksi secara bersamaan.
  • Beberapa utas kontrol dapat mengeksploitasi paralelisme sejati yang mungkin terjadi pada sistem multiprosesor.
  • Pada sistem uni-processor, algoritma penjadwalan thread diterapkan dan prosesor dijadwalkan untuk menjalankan setiap thread satu per satu.
  • Semua thread yang berjalan dalam proses berbagi ruang alamat yang sama, deskriptor file, stack dan atribut terkait proses lainnya.
  • Karena rangkaian proses berbagi memori yang sama, sinkronisasi akses ke data bersama dalam proses mendapatkan kepentingan yang belum pernah terjadi sebelumnya.

Saya meminjam info di atas dari Pencarian Pengetahuan! blog.


218
2018-03-19 14:17



Pertama, mari kita lihat pada aspek teoritis. Anda perlu memahami apa proses secara konseptual untuk memahami perbedaan antara proses dan utas dan apa yang dibagi di antara mereka.

Kami memiliki yang berikut dari bagian 2.2.2 Model Thread Klasik di Sistem Operasi Modern 3e oleh Tanenbaum:

Model proses didasarkan pada dua konsep independen: sumber daya   pengelompokan dan eksekusi. Terkadang berguna untuk memisahkan mereka;   Di sinilah benang masuk ....

Dia melanjutkan:

Salah satu cara untuk melihat suatu proses adalah bahwa itu adalah cara   kelompok sumber daya terkait bersama. Suatu proses memiliki ruang alamat   mengandung teks dan data program, serta sumber daya lainnya. Ini   sumber daya dapat mencakup file terbuka, proses anak, alarm yang tertunda,   penangan sinyal, informasi akuntansi, dan banyak lagi. Dengan menempatkannya   bersama dalam bentuk proses, mereka dapat dikelola dengan lebih mudah.   Konsep lain yang dimiliki suatu proses adalah benang eksekusi, biasanya   disingkat menjadi hanya utas. Benang memiliki penghitung program yang disimpan   melacak instruksi mana yang akan dieksekusi selanjutnya. Ini memiliki register, yang   memegang variabel kerja saat ini. Ini memiliki setumpuk, yang berisi   riwayat eksekusi, dengan satu frame untuk setiap prosedur yang disebut tetapi tidak   belum kembali dari. Meskipun sebuah thread harus dijalankan dalam beberapa proses,   benang dan prosesnya adalah konsep yang berbeda dan dapat diobati   secara terpisah. Proses digunakan untuk mengelompokkan sumber daya bersama; utas   adalah entitas yang dijadwalkan untuk dieksekusi pada CPU.

Lebih jauh ke bawah ia menyediakan tabel berikut:

Per process items             | Per thread items
------------------------------|-----------------
Address space                 | Program counter
Global variables              | Registers
Open files                    | Stack
Child processes               | State
Pending alarms                |
Signals and signal handlers   |
Accounting information        |

Mari kita berurusan dengan perangkat keras multithreading isu. Secara klasik, CPU akan mendukung satu thread eksekusi, mempertahankan status thread melalui satu program counter, dan set register. Tetapi apa yang terjadi jika ada cache yang hilang? Butuh waktu lama untuk mengambil data dari memori utama, dan ketika itu terjadi CPU hanya duduk di sana diam. Jadi seseorang memiliki ide untuk pada dasarnya memiliki dua set status thread (PC + register) sehingga thread lain (mungkin dalam proses yang sama, mungkin dalam proses yang berbeda) dapat menyelesaikan pekerjaan sementara thread lain menunggu di memori utama. Ada beberapa nama dan implementasi dari konsep ini, seperti HyperThreading dan Multithreading secara bersamaan (SMT untuk pendek).

Sekarang mari kita lihat sisi perangkat lunak. Pada dasarnya ada tiga cara bahwa utas dapat diterapkan pada sisi perangkat lunak.

  1. Thread Userspace
  2. Kernel Threads
  3. Kombinasi keduanya

Yang Anda perlukan untuk mengimplementasikan utas adalah kemampuan untuk menyimpan keadaan CPU dan memelihara banyak tumpukan, yang dalam banyak hal dapat dilakukan di ruang pengguna. Keuntungan dari thread ruang pengguna adalah perpindahan thread super cepat karena Anda tidak perlu menjebak ke kernel dan kemampuan untuk menjadwalkan thread Anda seperti yang Anda suka. Kelemahan terbesar adalah ketidakmampuan untuk melakukan pemblokiran I / O (yang akan memblokir seluruh proses dan semua itu adalah utas pengguna), yang merupakan salah satu alasan utama kami menggunakan utas di tempat pertama. Memblokir I / O menggunakan benang sangat menyederhanakan desain program dalam banyak kasus.

Kernel thread memiliki keuntungan karena dapat menggunakan pemblokiran I / O, di samping meninggalkan semua masalah penjadwalan ke OS. Tetapi setiap saklar ulir membutuhkan perangkap ke kernel yang berpotensi relatif lambat. Namun, jika Anda beralih utas karena diblokir I / O ini tidak benar-benar masalah karena operasi I / O mungkin menjebak Anda ke dalam kernel.

Pendekatan lain adalah menggabungkan keduanya, dengan beberapa utas kernel masing-masing memiliki beberapa utas pengguna.

Jadi, kembali ke pertanyaan Anda tentang terminologi, Anda dapat melihat bahwa suatu proses dan rangkaian pelaksanaan adalah dua konsep yang berbeda dan pilihan Anda tentang istilah mana yang akan digunakan bergantung pada apa yang Anda bicarakan. Mengenai istilah "proses ringan", saya pribadi tidak melihat titik di dalamnya karena tidak benar-benar menyampaikan apa yang terjadi serta "benang eksekusi" panjang.


90
2017-10-22 12:42



Untuk menjelaskan lebih lanjut sehubungan dengan pemrograman konkuren

  1. Suatu proses memiliki lingkungan eksekusi mandiri. Suatu proses umumnya memiliki seperangkat sumber daya run-time dasar yang lengkap dan pribadi; khususnya, setiap proses memiliki ruang memorinya sendiri.

  2. Thread ada dalam suatu proses - setiap proses memiliki setidaknya satu proses. Thread berbagi sumber daya proses, termasuk memori dan membuka file. Hal ini membuat komunikasi yang efisien, tetapi berpotensi bermasalah.

Menjaga orang rata-rata dalam pikiran,

Di komputer Anda, buka Microsoft Word dan browser web. Kami menyebutnya dua proses.

Di Microsoft kata, Anda mengetik beberapa hal dan itu akan secara otomatis disimpan. Sekarang, Anda akan mengamati pengeditan dan penyimpanan terjadi secara paralel - mengedit pada satu utas dan menyimpan pada utas lainnya.


57
2017-12-24 07:04



Aplikasi terdiri dari satu atau lebih proses. Suatu proses, dalam istilah yang paling sederhana, adalah program eksekusi. Satu atau lebih benang berjalan dalam konteks proses. Thread adalah unit dasar yang sistem operasinya mengalokasikan waktu prosesor. Thread dapat mengeksekusi bagian apa pun dari kode proses, termasuk bagian yang saat ini sedang dieksekusi oleh utas lain. Serat adalah unit eksekusi yang harus dijadwalkan secara manual oleh aplikasi. Serat berjalan dalam konteks benang yang menjadwalkannya.

Dicuri dari sini.


40
2017-10-14 09:16



Proses adalah kumpulan kode, memori, data, dan sumber daya lainnya. Thread adalah urutan kode yang dieksekusi dalam ruang lingkup proses. Anda dapat (biasanya) memiliki beberapa thread yang dieksekusi secara bersamaan dalam proses yang sama.


22
2017-10-14 09:30