Apakah ada perbedaan antara serat, coroutine dan benang hijau dan jika memang demikian, apakah itu?

57

Hari ini saya membaca beberapa artikel di internet tentang serat, coroutine dan benang hijau, dan sepertinya konsep ini memiliki banyak kesamaan, tetapi ada sedikit perbedaan, terutama ketika kita berbicara tentang serat dan coroutine.

Adakah ringkasan yang ringkas dan benar tentang apa yang membuat mereka berbeda satu sama lain?

Pembaruan: Saya menemukan dokumen Coroutine dan serat Pembeda (N4024 C ++ draft) yang sangat baik dalam membedakan antara serat dan coroutine.

DejanLekic
sumber

Jawaban:

106

A Fiber adalah utas ringan yang menggunakan multitasking kooperatif alih-alih multitasking preemptive. Serat yang berjalan harus secara eksplisit "menghasilkan" agar serat lain dapat berjalan, yang membuat implementasinya jauh lebih mudah daripada utas kernel atau pengguna.

Sebuah coroutine adalah komponen yang generalizes sebuah sub rutin untuk memungkinkan beberapa entry point untuk menangguhkan dan melanjutkan eksekusi pada lokasi tertentu. Tidak seperti subrutin, coroutine dapat keluar dengan memanggil coroutine lain, yang nantinya dapat kembali ke titik di mana mereka dipanggil dalam coroutine asli.

Sebuah Hijau Thread adalah thread yang dijadwalkan oleh mesin virtual (VM) bukan native oleh sistem operasi yang mendasarinya. Thread hijau meniru lingkungan multithreaded tanpa mengandalkan kemampuan OS asli, dan mereka dikelola di ruang pengguna alih-alih ruang kernel, memungkinkan mereka untuk bekerja di lingkungan yang tidak memiliki dukungan thread asli.

Robert Harvey
sumber
13
Saya hanya bisa mengatakannya sendiri - jawaban ini sangat berharga bagi saya. Saya berbagi pendapat dengan Robert tentang hal ini.
DejanLekic
"Ringkasan topik luas adalah kekhasan Wikipedia, yang difokuskan dan dioptimalkan untuk menyediakan konten ini dan menumbuhkan budaya yang berorientasi pada hal itu. Orang yang bersedia, paling mampu, dan berpengalaman dalam memberikan ringkasan seperti itu pergi ke Wikipedia, bukan ke Stack Exchange ... Orang yang mencari ini di mesin pencari biasanya akan disajikan dua contoh konten yang bersaing secara langsung, satu di jaringan SE, yang lain di Wikipedia ... Karena alasan yang disebutkan di atas, kemungkinan besar konten SE akan terlihat lebih rendah dalam perbandingan ... "
agas
Catatan, coroutine dan serat dapat dianggap sangat erat kaitannya - mungkin bahkan hal yang sama. Jika seseorang menginginkan coroutine, mereka dapat diimplementasikan melalui serat dengan sedikit usaha, dan sebaliknya.
cHao
9
Tidak menjelaskan bagaimana mereka berbeda. Semua definisi ini agaknya setara.
hasen
1
@ gstackoverflow: Utas Java adalah utas OS. JVM menjadwalkan mereka melalui OS.
Robert Harvey