Apa perbedaan teknis antara proses dan thread?
Saya mendapatkan perasaan kata seperti 'proses' adalah berlebihan dan ada juga perangkat keras dan perangkat lunak benang. Bagaimana proses ringan dalam bahasa seperti Pulang? Apakah ada alasan yang pasti untuk menggunakan satu istilah di atas yang lain?
Kedua proses dan thread yang independen urutan eksekusi. Khas perbedaan adalah bahwa benang (dari proses yang sama) berjalan di ruang memori bersama, sementara proses yang berjalan di memori terpisah ruang.
I'm tidak yakin apa "hardware" lebih "software" benang anda mungkin mengacu. Benang operasi lingkungan fitur, daripada CPU fitur (meskipun CPU biasanya memiliki operasi yang membuat benang efisien).
Erlang menggunakan istilah "proses" karena tidak mengekspos bersama-memori multiprogramming model. Memanggil mereka "benang" akan menyiratkan bahwa mereka memiliki memori bersama.
Proses Masing-masing proses yang menyediakan sumber daya yang dibutuhkan untuk melaksanakan program. Sebuah proses memiliki ruang alamat virtual, kode executable, menangani terbuka untuk objek sistem, keamanan, unik identifier proses, variabel lingkungan, prioritas kelas, minimum dan maksimum yang bekerja mengatur ukuran, dan setidaknya satu thread eksekusi. Setiap proses dimulai dengan thread tunggal, sering disebut primer benang, tapi dapat membuat tambahan benang dari benang.
Benang Sebuah thread adalah suatu entitas dalam sebuah proses yang dapat dijadwalkan untuk eksekusi. Semua thread dari sebuah proses berbagi ruang alamat virtual dan sumber daya sistem. Selain itu, setiap thread mempertahankan exception handler, penjadwalan prioritas, benang penyimpanan lokal, unik benang pengenal, dan satu set struktur sistem yang akan digunakan untuk menyimpan benang konteks sampai dijadwalkan. Thread konteks mencakup benang's set mesin register, kernel stack, benang blok lingkungan, dan pengguna menumpuk di ruang alamat dari benang's proses. Benang juga dapat memiliki mereka sendiri konteks keamanan, yang dapat digunakan untuk meniru klien.
Menemukan ini di MSDN berikut: Tentang Proses dan Thread
Microsoft Windows mendukung preemptive multitasking, yang menciptakan efek eksekusi simultan dari beberapa benang dari beberapa proses. Pada multiprosesor komputer, sistem secara bersamaan dapat menjalankan banyak thread karena ada prosesor pada komputer.
Proses:
Thread:
Saya meminjam atas info dari Pengetahuan Quest! blog.
Pertama, let's melihat aspek teoritis. Anda perlu memahami apa proses konseptual untuk memahami perbedaan antara proses dan thread dan apa yang's bersama di antara mereka.
Kami memiliki berikut dari bagian 2.2.2 Klasik Benang Model di Sistem Operasi Modern 3e menurut Tanenbaum:
proses model ini didasarkan pada dua independen konsep: sumber daya pengelompokan dan eksekusi. Kadang-kadang hal ini digunakanful untuk memisahkan mereka; ini adalah tempat dimana benang datang di....
Dia melanjutkan:
salah Satu cara untuk melihat sebuah proses adalah bahwa itu adalah cara untuk kelompok sumber daya terkait bersama-sama. Sebuah proses memiliki ruang alamat mengandung teks program dan data, serta sumber daya lainnya. Ini sumber daya dapat mencakup file yang terbuka, proses anak, pending alarm, penanganan sinyal, informasi akuntansi, dan banyak lagi. Dengan menempatkan mereka bersama-sama dalam bentuk proses, mereka dapat dikelola dengan lebih mudah. Yang lain konsep sebuah proses yang memiliki benang merah dari eksekusi, biasanya disingkat menjadi hanya benang. Benang memiliki sebuah program counter yang menyimpan track yang digunation untuk mengeksekusi berikutnya. Memiliki register, yang tahan yang saat ini bekerja variabel. Memiliki tumpukan, yang berisi eksekusi sejarah, dengan satu frame untuk masing-masing prosdure disebut tapi tidak belum kembali dari. Meskipun benang harus mengeksekusi beberapa proses, benang dan proses adalah konsep yang berbeda dan dapat diobati sepaara terpisah. Proses yang digunakan untuk sumber daya kelompok bersama-sama; benang ini adalah entitas yang dijadwalkan untuk eksekusi di CPU.
Lebih jauh ke bawah dia 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 |
Let's bergerak dengan hardware multithreading masalah. Klasik, CPU akan mendukung sebuah thread tunggal dari eksekusi, mempertahankan benang's negara melalui satu program counter, dan set register. Tapi apa yang terjadi jika ada's cache miss? Dibutuhkan waktu yang lama untuk mengambil data dari memori utama, dan saat itu's terjadi di CPU hanya duduk di sana menganggur. Jadi seseorang memiliki ide untuk pada dasarnya memiliki dua set benang negara ( PC + register ) sehingga thread lain ( mungkin dalam proses yang sama, mungkin dalam proses yang berbeda ) bisa mendapatkan pekerjaan yang dilakukan saat thread lain yang menunggu di memori utama. Ada beberapa nama dan implementasi dari konsep ini, seperti HyperThreading dan Multithreading Simultan ( TPS untuk pendek ).
Sekarang mari's melihat sisi perangkat lunak. Pada dasarnya ada tiga cara yang benang dapat diimplementasikan pada sisi perangkat lunak.
Semua yang anda butuhkan untuk melaksanakan benang adalah kemampuan untuk menyimpan CPU negara dan mempertahankan beberapa tumpukan, yang dalam banyak kasus akan dilakukan di user space. Keuntungan dari pengguna ruang benang super cepat thread beralih karena anda don't harus perangkap ke dalam kernel dan kemampuan untuk menjadwalkan benang anda dengan cara yang anda suka. Kelemahan terbesar adalah ketidakmampuan untuk melakukan blocking I/O ( yang akan memblokir seluruh proses dan semua itu's pengguna benang ), yang merupakan salah satu alasan mengapa kita menggunakan benang di tempat pertama. Blocking I/O menggunakan benang yang sangat menyederhanakan program desain dalam banyak kasus.
Kernel thread yang memiliki keuntungan menjadi mampu menggunakan blocking I/O, selain itu untuk meninggalkan semua masalah penjadwalan untuk OS. Tetapi setiap thread beralih membutuhkan menjebak ke dalam kernel yang berpotensi relatif lambat. Namun, jika anda're switching thread karena diblokir I/O ini isn't benar-benar masalah karena operasi I/O mungkin terperangkap ke dalam kernel sudah pula.
Pendekatan lain adalah untuk menggabungkan dua, dengan beberapa kernel thread yang masing-masing memiliki beberapa user thread.
Jadi kembali ke pertanyaan anda terminologi, anda dapat melihat bahwa proses dan thread eksekusi adalah dua konsep yang berbeda dan pilihan dari istilah yang digunakan tergantung pada apa yang anda're bicarakan. Mengenai istilah "ringan proses", I don't secara pribadi melihat titik di dalamnya sejak itu doesn't benar-benar menyampaikan apa's terjadi serta istilah "benang eksekusi".
Untuk menjelaskan lebih lanjut sehubungan dengan concurrent programming
Sebuah proses memiliki self-contained lingkungan eksekusi. Suatu proses umumnya telah lengkap, kamar set dasar run-time sumber daya; secara khusus, setiap proses memiliki ruang memori sendiri.
Benang ada dalam proses setiap proses memiliki setidaknya satu. Thread berbagi proses's sumber daya, seperti memori dan membuka file. Hal ini membuat efisien, tetapi berpotensi bermasalah, komunikasi.
Menjaga orang rata-rata dalam pikiran,
Di komputer anda, buka Microsoft Word dan web browser. Kita menyebut dua proses.
Di Microsoft word, anda mengetik beberapa hal dan itu akan disimpan secara otomatis. Sekarang, anda akan mengamati mengedit dan menyimpan terjadi di paralel - editing pada satu benang dan hemat di thread lain.
aplikasi terdiri dari satu atau lebih proses. Proses, dalam istilah yang paling sederhana, adalah mengeksekusi program. Satu atau lebih benang berjalan dalam konteks proses. Thread merupakan unit dasar untuk sistem operasi mengalokasikan waktu prosesor. Thread dapat melaksanakan setiap bagian dari proses kode, termasuk bagian-bagian yang saat ini sedang dieksekusi oleh thread lain. Serat adalah unit pelaksanaan yang harus dijadwalkan secara manual oleh aplikasi. Serat dijalankan dalam konteks benang yang jadwal mereka.
Dicuri dari di sini.
Proses adalah kumpulan kode, memori, data dan sumber daya lainnya. Sebuah thread adalah urutan kode yang dijalankan dalam lingkup proses. Anda dapat (biasanya) memiliki beberapa benang mengeksekusi secara bersamaan dalam proses yang sama.
Proses:
Contoh:
Mengatakan, pembukaan setiap browser (mozilla, Chrome, IE). Pada titik ini proses baru akan mulai mengeksekusi.
Thread:
Contoh:
Membuka banyak tab di browser.
Kedua proses dan thread yang independen urutan eksekusi. Khas perbedaan adalah bahwa benang (dari proses yang sama) berjalan di ruang memori bersama, sementara proses yang berjalan di memori terpisah ruang.
Proses
Adalah program dalam eksekusi. ini memiliki bagian teks saya.e kode program, aktivitas saat ini sebagai yang diwakili oleh nilai dari program counter & konten prosesor mendaftar. Hal ini juga termasuk process stack yang berisi data sementara(seperti parameter fungsi, kembali ditangani dan variabel lokal) dan sebuah data section, yang berisi variabel global. Proses ini juga dapat mencakup tumpukan, yang merupakan memori yang dialokasikan secara dinamis selama proses waktu berjalan.
Thread
Thread merupakan unit dasar dari CPU pemanfaatan; ini terdiri dari benang ID, program counter, register set, dan stack. berbagi dengan thread lain yang dimiliki untuk proses yang sama untuk kode bagian, bagian data dan sumber daya sistem operasi seperti membuka file dan sinyal.
-- Diambil dari Sistem Operasi oleh Galvin
Kedua benang dan proses adalah atomic unit OS alokasi sumber daya (yaitu ada concurrency model yang menggambarkan bagaimana waktu CPU dibagi antara mereka, dan model yang memiliki OS lain sumber daya). Ada perbedaan dalam:
Greg Hewgill di atas adalah benar tentang Erlang arti dari kata "proses", dan di sini di sana's diskusi kenapa Erlang bisa melakukan proses ringan.
Mencoba untuk menjawab pertanyaan ini berkaitan dengan Java dunia.
Suatu proses adalah pelaksanaan program benang tunggal urutan eksekusi dalam proses. Sebuah proses dapat mengandung beberapa thread. Thread ini kadang-kadang disebut ringan proses.
Misalnya:
Contoh 1: Sebuah JVM berjalan dalam satu proses dan thread dalam JVM berbagi tumpukan milik proses itu. Itulah mengapa beberapa thread dapat mengakses objek yang sama. Thread berbagi tumpukan dan memiliki sendiri ruang stack. Ini adalah cara satu benang doa dari metode dan variabel lokal yang terus thread aman dari thread lain. Tapi tumpukan tidak thread-safe dan harus disinkronkan untuk benang pengaman.
Contoh 2: Sebuah program yang mungkin tidak bisa menggambar dengan membaca penekanan tombol. Program harus memberikan perhatian penuh untuk input keyboard dan kurang memiliki kemampuan untuk menangani lebih dari satu hal pada suatu waktu akan menyebabkan masalah. Solusi ideal untuk masalah ini adalah dengan mulus eksekusi dari dua atau lebih bagian-bagian dari sebuah program pada saat yang sama. Benang memungkinkan kita untuk melakukan hal ini. Berikut Gambar gambar merupakan sebuah proses dan membaca keystroke adalah sub proses (benang).
http://lkml.iu.edu/hypermail/linux/kernel/9608/0191.html
Linus Torvalds ([email protected])
Tue, 6 Agustus 1996 12:47:31 +0300 (EET DST)
Pesan sorted by: [ tanggal ][ thread ][ subjek ][ penulis ]
pesan Berikutnya: Bernd P. Ziller: "Re: Oops di get_hash_table"
pesan Sebelumnya: Linus Torvalds: "Re: permintaan I/O pemesanan"
Pada Senin, 5 Agustus 1996, Peter P. Eiserloh menulis:
Kami harus tetap jelas konsep thread. Terlalu banyak orang tampaknya membingungkan benang dengan proses. Berikut diskusi tidak mencerminkan keadaan saat ini linux, melainkan merupakan mencoba untuk tetap pada tingkat tinggi diskusi.
TIDAK ada!
TIDAK Ada alasan untuk berpikir bahwa "benang" dan "proses" entitas yang terpisah. Yang's bagaimana hal itu's secara tradisional dilakukan, tapi aku pribadi berpikir itu's besar kesalahan untuk berpikir bahwa cara. Satu-satunya alasan untuk berpikir bahwa cara ini beban historis.
Kedua benang dan proses yang benar-benar hanya satu hal: "konteks pelaksanaan". Mencoba untuk artifisial membedakan kasus yang berbeda adalah hanya membatasi diri.
"konteks eksekusi", dengan ini disebut COE, hanya konglomerat dari semua negara yang COE. Negara itu termasuk hal-hal seperti CPU negara (register dll), MMU negara (halaman pemetaan), izin negara (uid, gid) dan berbagai "komunikasi serikat" (membuka file, sinyal penangan dll). Secara tradisional, perbedaan antara "thread" dan "proses" telah terutama yang memiliki benang CPU negara (+ mungkin beberapa lainnya minimal state), sementara semua lainnya konteks berasal dari proses. Namun, yang's hanya one cara membagi total negara dari COE, dan tidak ada yang mengatakan bahwa itu's cara yang tepat untuk melakukannya. Membatasi diri sendiri untuk yang jenis gambar hanya bodoh.
cara Linux berpikir tentang hal ini (dan dengan cara yang saya ingin hal-hal untuk bekerja) adalah yang ada is tidak ada hal seperti itu sebagai "proses" atau "thread". Ada hanya totalitas COE (disebut "tugas" oleh Linux). Berbeda COE's dapat berbagi bagian dari konteks mereka dengan satu sama lain, dan salah satu dari subset berbagi itu adalah tradisional "thread"/"proses" setup, tapi yang benar-benar harus dilihat sebagai HANYA sebuah subset (it's penting subset, tapi yang penting tidak berasal dari desain, tapi dari standar: kami obviusly ingin menjalankan standar-benang sesuai program di atas Linux terlalu).
singkatnya: TIDAK desain di thread/proses cara berpikir. Yang kernel harus dirancang di sekitar COE cara berpikir, dan kemudian pthreads library dapat mengekspor terbatas pthreads antarmuka untuk pengguna yang ingin menggunakan yang cara melihat COE's.
Hanya sebagai contoh dari apa yang menjadi mungkin ketika anda berpikir COE sebagai lawan benang/proses:
- Anda dapat melakukan eksternal "cd" program ini, sesuatu yang lebih tradisional mungkin dalam UNIX dan/atau proses/thread (contoh konyol, tapi ide adalah bahwa anda dapat memiliki jenis-jenis "modul" yang't terbatas tradisional UNIX/benang setup). Melakukan:
clone(CLONE_VM|CLONE_FS);
anak: execve("eksternal-cd");
/ "execve()" akan memisahkan VM, jadi satu-satunya alasan kami digunakan CLONE_VM adalah untuk membuat undang-undang dari kloning lebih cepat /
- Anda dapat melakukan "vfork()" secara alami (itu meeds minimal dukungan kernel, tapi yang mendukung cocok CUA cara berpikir sempurna):
clone(CLONE_VM);
anak: terus berjalan, akhirnya execve()
ibu: menunggu execve
- anda dapat melakukan eksternal "IO deamons":
clone(CLONE_FILES);
anak: buka file deskriptor dll
ibu: gunakan fd's anak membuka dan ay.
Semua pekerjaan di atas karena anda tidak't terikat dengan benang/proses cara berpikir. Pikirkan web server misalnya, di mana CGI script tersebut dilakukan sebagai "benang eksekusi". Anda dapat't melakukan itu dengan tradisional benang, karena tradisional benang harus selalu berbagi seluruh ruang alamat, sehingga anda'd harus link di segala sesuatu yang anda pernah ingin dilakukan di web server itu sendiri (a "thread" dapat't berjalan lain executable).
Berpikir ini sebagai "konteks eksekusi" bukan masalah, anda tugas-tugas sekarang dapat memilih untuk mengeksekusi program eksternal (= memisahkan ruang alamat dari orang tua) dll jika mereka ingin, atau mereka dapat untuk contoh berbagi segalanya dengan orang tua except untuk file deskriptor (sehingga sub-"benang" dapat membuka banyak file tanpa orang tua perlu khawatir tentang mereka: mereka menutup secara otomatis ketika sub-"thread" keluar, dan itu doesn't menggunakan up fd's orang tua).
Berpikir ulir "inetd", misalnya. Anda ingin overhead yang rendah garpu+exec, sehingga dengan Linux cara yang anda dapat bukan menggunakan "fork()" anda menulis multi-threaded inetd dimana setiap thread yang dibuat dengan hanya CLONE_VM (berbagi ruang alamat, tapi don't berbagi file deskriptor dll). Maka anak dapat execve jika itu adalah layanan eksternal (rlogind, misalnya), atau mungkin itu adalah salah satu internal inetd jasa (echo, timeofday) dalam hal ini hanya melakukan hal yang sama's hal dan keluar.
Anda dapat't melakukan itu dengan "thread"/"proses".
Linus
Perbedaan antara Benang dan Proses?
Suatu proses adalah melaksanakan instance dari aplikasi dan benang adalah jalan eksekusi dalam proses. Juga, sebuah proses dapat mengandung beberapa thread.Hal ini penting untuk dicatat bahwa sebuah thread dapat melakukan apa-apa proses dapat dilakukan. Tapi karena suatu proses dapat terdiri dari beberapa thread, thread bisa dianggap sebagai 'ringan' proses. Dengan demikian, perbedaan penting antara benang dan proses kerja yang masing-masing digunakan untuk mencapai. Benang yang digunakan untuk tugas-tugas kecil, sedangkan proses yang digunakan untuk lebih 'kelas berat' tugas – pada dasarnya eksekusi aplikasi.
Perbedaan lain antara thread dan proses adalah bahwa benang dalam proses yang sama berbagi ruang alamat yang sama, sedangkan proses yang berbeda tidak. Hal ini memungkinkan benang untuk membaca dari dan menulis ke struktur data dan variabel, dan juga memfasilitasi komunikasi antara benang. Komunikasi antara proses – juga dikenal sebagai IPC, atau komunikasi inter-proses – cukup sulit dan sumber daya-intensif.
Berikut adalah ringkasan dari perbedaan antara benang dan proses:
Benang lebih mudah untuk membuat daripada proses karena mereka don't membutuhkan ruang alamat yang terpisah.
Multithreading membutuhkan hati-hati pemrograman sejak benang berbagi data strucures yang hanya dapat dimodifikasi oleh satu thread pada suatu waktu. Tidak seperti benang, proses don't berbagi sama ruang alamat.
Benang yang dianggap ringan karena mereka menggunakan jauh kurang sumber daya dari proses.
Proses yang independen satu sama lain. Benang, karena mereka berbagi ruang alamat yang sama adalah saling tergantung, jadi hati-hati harus diambil sehingga benang yang berbeda don't langkah pada satu sama lain. Ini adalah benar-benar cara lain menyatakan #2 di atas.
Suatu proses dapat terdiri dari beberapa benang.
Dari sudut pandang seorang pewawancara, pada dasarnya ada 3 hal utama yang saya ingin mendengar, selain hal-hal yang jelas seperti sebuah proses dapat memiliki banyak thread:
Jika anda ingin lebih, Scott Langham's respon yang cukup banyak meliputi segala sesuatu. Semua ini adalah dari perspektif sistem operasi. Bahasa yang berbeda dapat menerapkan konsep yang berbeda, seperti tugas-tugas, cahaya-wigh benang dan sebagainya, tetapi mereka hanyalah cara-cara yang menggunakan benang (serat pada Windows). Tidak ada perangkat keras dan perangkat lunak benang. Ada perangkat keras dan perangkat lunak pengecualian dan interupsi, atau mode pengguna dan kernel benang.
Berikut adalah apa yang saya dapatkan dari salah satu artikel di Kode Project. Saya kira itu menjelaskan segala sesuatu yang dibutuhkan dengan jelas.
Sebuah thread adalah mekanisme lain untuk membagi beban kerja ke dalam terpisah eksekusi sungai. Thread bobot yang lebih ringan dari suatu proses. Ini berarti, ia menawarkan fleksibilitas kurang dari penuh ditiup proses, tetapi dapat akan dimulai lebih cepat karena ada kurang untuk Sistem Operasi untuk set up. Ketika sebuah program terdiri dari dua atau lebih benang, semua benang berbagi satu ruang memori. Proses diberi memisahkan ruang alamat. semua benang berbagi satu tumpukan. Tetapi setiap thread ini diberikan sendiri stack.
Mencoba untuk menjawab dari Kernel Linux's OS View
Sebuah program menjadi sebuah proses ketika diluncurkan ke memori. Sebuah proses memiliki ruang alamat yang berarti memiliki berbagai segmen dalam memori seperti .teks segement untuk menyimpan kode dikompilasi, .bss untuk menyimpan uninitialized statis atau variabel global, dll. Setiap proses akan memiliki program counter dan user-spcae stack. Di dalam kernel, setiap proses akan memiliki kernel stack (yang terpisah dari ruang pengguna stack untuk masalah keamanan) dan struktur bernama task_struct
yang umumnya disarikan sebagai proses kontrol blok, menyimpan semua informasi mengenai proses tersebut sebagai prioritas, negara,(dan banyak lainnya chunk). Sebuah proses dapat memiliki banyak thread eksekusi.
Datang ke benang, mereka berada di dalam sebuah proses dan berbagi ruang alamat proses induk bersama dengan sumber daya lainnya yang dapat ditularkan selama pembuatan thread seperti filesystem sumber daya, berbagi sinyal tertunda, berbagi data(variabel dan petunjuk) oleh karena itu membuat benang yang ringan dan oleh karena itu memungkinkan lebih cepat context switching. Di dalam kernel, setiap thread memiliki kernel stack bersama dengan task_struct
struktur yang mendefinisikan thread. Oleh karena itu kernel pandangan benang dari proses yang sama seperti entitas yang berbeda dan schedulable dalam diri mereka sendiri. Benang dalam proses yang sama-sama id disebut sebagai benang group id(tgid
), juga mereka memiliki id unik yang disebut sebagai proses id (pid
).
Proses: program di bawah eksekusi ini dikenal sebagai proses
Benang: Benang adalah fungsi yang dijalankan dengan bagian lain dari program yang didasarkan pada konsep "satu dengan lainnya"jadi, thread ini merupakan bagian dari proses..