线/纤维-澄清

I'm a bit confused regarding the concept of "fibers" as to their relation to 1) threads and 2) what they're seen as by the Kernel.

To my understanding, a fiber is a thread that was created by a thread, and managed by its creating thread (i.e. perhaps a scheduler?). However, for all intensive purposes, I'd consider it as still being a "thread" and seen by the kernel as such.

The explanation I'm receiving from a colleague is that fibers are completely invisible to the kernel and run entirely in user space, and are in no way "threads", as per his email here:

Threads are sometimes implemented in userspace libraries, thus called user threads. The kernel is unaware of them, so they are managed and scheduled in userspace. Some implementations base their user threads on top of several kernel threads, to benefit from multi-processor machines (M:N model). In this article the term "thread" (without kernel or user qualifier) defaults to referring to kernel threads. User threads as implemented by virtual machines are also called green threads. User threads are generally fast to create and manage, but cannot take advantage of multithreading or multiprocessing, and will get blocked if all of their associated kernel threads get blocked even if there are some user threads that are ready to run.

Fibers are an even lighter unit of scheduling which are cooperatively scheduled: a running fiber must explicitly "yield" to allow another fiber to run, which makes their implementation much easier than kernel or user threads. A fiber can be scheduled to run in any thread in the same process. This permits applications to gain performance improvements by managing scheduling themselves, instead of relying on the kernel scheduler (which may not be tuned for the application). Parallel programming environments such as OpenMP typically implement their tasks through fibers. Closely related to fibers are coroutines, with the distinction being that coroutines are a language-level construct, while fibers are a system-level construct.

I'm hoping to get a little bit of a better explanation in terms of exactly what a fiber is (is it an actual thread as far as the os/kernel are concerned, and simply managed by its creating thread?).

I've researched it extensively via Google searches, but have only found one simple answer everywhere I've looked, including here: "A fiber is a thread that's created and managed by a thread."

If anyone has anything more informative they can share or point me to, it would be greatly appreciated. My colleagues argument is that Golang's Goroutines use "fibers" and those fibers are invisible to the OS - thus, a "correct" implementation of fibers. I, personally, feel that Goroutines are more closely related to coroutines, and do not implement a fiber/thread scenario at all...