来!一文读懂什么是线程、协程和纤程!

目录

1.什么是线程?

2.什么是协程?

3.什么是纤程?

4.相互关系


1.什么是线程?

线程是进程内部的一条访问路径或者序列。大部分时候我们写的程序都是单线程的,即每个进程内部只有唯一的一条执行路径,从代码角度看,那就是从主函数main()的第一行代码到最后一行代码,这条顺序执行的路径就是主线程。如果要产生一个新的线程,也即一条新的执行路径,就需要编写一个新的线程函数比如:thread_fun(),该函数从第一行代码执行到最后一行就是我们的第二条路径,两条执行路径并发运行。当然也可以创建多条执行路径,也就是多线程。

在linux下可以通过命令ps -eLf查看进程中的线程数量。

2.什么是协程?

协程全称为协同程序,又称作微线程。它与多线程情况下的线程比较类似。协程有自己的堆栈、局部变量和指令指针,通过,多个协程共享全局变量等很多信息。其思想是,一系列相互依赖的协程依次使用CPU,每次只有一个协程运行,其他协程处于休眠状态。协程实际上是在一个线程当中,每个协程对CPU进行分时访问。

线程和协程的主要区别在于:在多处理器的情况下,多线程程序可以同时运行多个线程;而协同程序需要通过协作来完成,在任一时刻只有一个协同程序在运行。

3.什么是纤程?

纤程是比线程更小的一个运行单位。一个线程可以拆分为多个纤程,然后通过人工转换,从而让各个纤程工作。

纤程起始就是线程里面创建的多个执行任务。

4.相互关系

协程是 coroutine , 是一个语言上的实现, 本质是基于线程上的上的调度, 要求协程上的代码不要做阻塞动作, 在异步操作结束后重新排队. 各个子任务之间的关系比较弱. 如果暂时都没事干, 调度者甚至会释放线程. 等到有事干的时候再开另外一个新线程. 线程并不固定.

而纤程是 fiber , 是由操作系统实现的一种轻量化线程上的一个执行结构. 通常是多个fiber共享一个固定的线程, 然后他们通过互相主动切换到其他fiber来交出线程的执行权. 各个子任务之间的关系非常强.

所以,

coroutine通常是说, 啊, 我正在等待一些事, 线程(调度者)啊你叫其他人先做吧. coroutine是排队做任务, 一张办公桌只给一个人用, 谁脑袋卡住了没事干就自觉把桌子上的东西打包走, 以后回来的话, 就跑去队列后面继续排

fiber则是, 我暂时没事干, 你(另外一个fiber)先做. fiber是主动决策哪个是接棒的fiber, 让另外一个fiber继续执行任务.


 

 

你可能感兴趣的:(Linux)