◆ 协程

由程序员手动切换。 属于线程,是在线程里面跑的,因此协程又称微线程和线程等。由于不用进行线程上下文切换,因此效率会更高。

资源:

  • 拥有自己的栈空间,大小动态调整。

安全性:

  • 拥有自己的寄存器上下文和栈。

上下文切换:

  • 无消耗,直接操作栈。调度切换是用户(程序员)手动切换,可控的切换时机,很小的切换代价,因此又叫用户态的轻量级的线程。

协程和线程的区别

    • 先理清楚一个概念:

      • 一个进程可以有多个线程、一个线程可以有多个协程。
      • 协程是一边吃饭一边说话。
      • 线程是一边听音乐一边写作业。

      协程

      • 协程是用户级的,拥有自己的寄存器上下文和栈,我怀疑C#中的 迭代器和基于任务的异步编程是协程(未经过验证)
      • 协程完全由用户控制,协程切换开销比较小。
      • 协程是串行的,在任何一个时刻,同一线程中的协程,只有一个协程在跑。

      线程

      • 线程是内核级的,共享进程内寄存器上下文。
      • 线程调度
    • 需要操作系统进行调度,线程切换需要切换内核态,开销耗时比较大。
    • 线程是并行的,多个线程可以同时运行。因为是多线程共享资源
    • ,所有访问全局变量的时候要加锁。

【windows 操作系统】协程的更多相关文章

  1. 协程IO多路复用

    协程:单线程下实现并发并发:伪并行,遇到IO就切换,单核下多个任务之间切换执行,给你的效果就是貌似你的几个程序在同时执行.提高效率任务切换 + 保存状态并行:多核cpu,真正的同时执行串行:一个任务执 ...

  2. 深入理解Python中协程的应用机制: 使用纯Python来实现一个操作系统吧!!

    本文参考:http://www.dabeaz.com/coroutines/   作者:David Beazley 缘起: 本人最近在学习python的协程.偶然发现了David Beazley的co ...

  3. 基于windows fiber的协程(coroutine)实现

    一个非常简单,但是实用的协程实现,使用Windows的*Fiber函数族(linux可以稍微改一下用*context函数族). fco.h #ifndef _MSC_VER #error " ...

  4. windows下多进程加协程并发模式

    好久没更新博客了.正好最近要整理一下最近这段时间做过的项目以及学习python的一些心得.如标题所示,今天就来说说windows下多进程加协程并发模式.其实网上还是蛮多在linux下的多进程加协程并发 ...

  5. 操作系统OS,Python - 协程(Coroutine)

    留坑 参考: https://en.wikipedia.org/wiki/Coroutine https://zh.wikipedia.org/wiki/%E5%8D%8F%E7%A8%8B http ...

  6. python中协程

    在引出协成概念之前先说说python的进程和线程. 进程: 进程是正在执行程序实例.执行程序的过程中,内核会讲程序代码载入虚拟内存,为程序变量分配空间,建立 bookkeeping 数据结构,来记录与 ...

  7. python之协程与IO操作

    协程 协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B ...

  8. Python-09-线程、进程、协程、异步IO

    0. 什么是线程(thread)? 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆 ...

  9. Python学习之路--进程,线程,协程

    进程.与线程区别 cpu运行原理 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Q ...

随机推荐

  1. 539. Minimum Time Difference

    Given a list of 24-hour clock time points in "Hour:Minutes" format, find the minimum minut ...

  2. 一段关于java NIO server端接受客户端socket连接;演示了关于channel,selector等组件的整合使用

    public class ReactorDemo { public static void main(String[] args) throws IOException { ServerSocketC ...

  3. golang中使用switch语句根据年月计算天数

    package main import "fmt" func main() { days := CalcDaysFromYearMonth(2021, 9) fmt.Println ...

  4. golang中接口类型小案例

    1.  在项目中实现注册成功之后,向用户发送邮件.微信提醒 package main import "fmt" type IMessage interface { send() b ...

  5. Java多线程专题4: 锁的实现基础 AQS

    合集目录 Java多线程专题4: 锁的实现基础 AQS 对 AQS(AbstractQueuedSynchronizer)的理解 Provides a framework for implementi ...

  6. plsql 将游标读取到table中

    -- 将游标中的数据 读取到table中 根据部门编号获得emp所有信息. declare cursor c(no emp.deptno%type)is select * from emp where ...

  7. SQL的多表查询(笛卡尔积原理)

    感谢大佬:https://blog.csdn.net/yang5726685/article/details/53538438 MySQL的多表查询(笛卡尔积原理) 先确定数据要用到哪些表. 将多个表 ...

  8. Pandas常用操作 - 去重

    1. 使用 drop_duplicates 去重 1.1 初始化数据 df = pd.DataFrame({'stu_name': ['Tom', 'Tony', 'Jack', 'Jack', np ...

  9. 文本处理命令(sort+uniq+cut+tr+wc)+三剑客之sed

    目录 文本处理命令+三剑客之sed 一.文本处理命令 1.排序命令 sort 2.检查/删除命令 uniq 3. cut 显示特定部分命令 4. 替换或删除命令 tr 5.统计 计算数字命令 wc 二 ...

  10. 通过shell脚本进行linux服务器的CPU和内存压测

    文章目录 内存压测 python的方式 shell的方式 cpu压测 在正常手段下,这个只是压测的方法 在不正常手段下(crontab计划任务),可以提高CPU和内存的使用率 什么?你问我为什么要提高 ...