美文网首页
进程、线程和协程

进程、线程和协程

作者: 高大强19 | 来源:发表于2020-09-23 11:51 被阅读0次

这三个概念是很基础也很重要的概念:

1.进程挂靠在操作系统,操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。注意是资源分配哦,在内存里,有自己独立的地址空间和堆。

2.线程是调度和分配的基本单位,线程只能属于进程,进程至少有一个线程。

进程好比是道路,线程比喻成各条车道。这些线程(车道)之间依靠代码逻辑(交通灯)来控制运行,一旦代码逻辑有误,如死锁,多个线程竞争唯一资源,线程将陷入混乱。

线程车道之间谁先运行时未知的,只有线程刚好被分配到cpu时间片(交通灯变化)的那一刻才能知道。

3.协程,是比线程更加轻量级的存在,协程能够由程序控制,性能带来了提升。就是当出现长时间的I/O操作时,通过让出目前的协程调度,执行下一个任务的方式,来消除ContextSwitch上的开销。

子程序(函数)调用是通过栈实现的,线程就是执行了一个子程序。而协程的调用不同,它是可中断的,记录一个状态后,转而执行别的子程序,在适当的时候在返回来接着执行。

当出现IO阻塞的时候,由协程的调度器进行调度,通过将数据流立刻yield掉(主动让出),并且记录当前栈上的数据,阻塞完后立刻再通过线程恢复栈,并把阻塞的结果放到这个线程上去跑,这样看上去好像跟写同步代码没有任何差别,这整个流程可以称为coroutine,而跑在由coroutine负责调度的线程称为Fiber。比如Golang里的 go关键字其实就是负责开启一个Fiber,让func逻辑跑在上面。

由于协程的暂停完全由程序控制,发生在用户态上;而线程的阻塞状态是由操作系统内核来进行切换,发生在内核态上。

因此,协程的开销远远小于线程的开销,也就没有了ContextSwitch上的开销。

拓展:

传统的J2EE系统中,系统的吞吐能力取决于每个线程的操作耗时,如果线程很多的时候,会存在很多线程处于空闲状态(等待该线程执行完才能执行),造成了资源应用不彻底。最常见的例子:JDBC它是同步阻塞的。现阶段行业里的比较流行的解决方案之一是单线程加上异步回调。其代表派是node.js以及Java里的新秀Vert.x

参考:https://www.cnblogs.com/Survivalist/p/11527949.html

https://blog.csdn.net/daaikuaichuan/article/details/82951084

相关文章

  • Python 线程和进程和协程总结

    Python 线程和进程和协程总结 线程和进程和协程 进程 进程是程序执行时的一个实例,是担当分配系统资源(CPU...

  • Python多线程、多进程和协程的实例讲解

    线程、进程和协程是什么 线程、进程和协程的详细概念解释和原理剖析不是本文的重点,本文重点讲述在Python中怎样实...

  • 进程、线程和协程

    概念 介绍 1.进程进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一...

  • 进程、线程和协程

    一、进程 1、多任务原理 多任务是指操作系统同时可以运行多个任务。 单核CPU实现多任务原理:操作系统轮流让各个任...

  • 进程、线程和协程

    1、概念 1.1、进程 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度...

  • 进程、线程和协程

    这三个概念是很基础也很重要的概念: 1.进程挂靠在操作系统,操作系统会以进程为单位,分配系统资源(CPU时间片、内...

  • 进程, 线程和协程

    进程: 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。 (程...

  • 进程、线程和协程

    1. 进程与线程 对于操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元 一个进程包含三个部分:代码、数...

  • 线程、进程和协程

    线程、进程和协程 进程、线程与并发 对多核的支持 实现一个线程 线程之间的通信 线程的调度和优化 为什么要学习多线...

  • 不同语言的协程示例

    进程和线程、协程的区别async 函数的含义和用法上面两篇文章介绍进程,线程, 和协程,以及javascript中...

网友评论

      本文标题:进程、线程和协程

      本文链接:https://www.haomeiwen.com/subject/akonyktx.html