一 引子 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制), 一种情况是该任务发生了阻塞, 另外一种情况是该任务计算的 ...
分类:
编程语言 时间:
2019-02-02 23:22:33
阅读次数:
223
一.greenlet模块 简单实现单线程内的任务切换: 1: import greenlet 2: def eat(name): 3: print("%s eat 1" % name) 4: # 第二步 5: g2.switch("egon") 6: print("%s eat 2" % name)... ...
分类:
编程语言 时间:
2019-01-30 01:24:07
阅读次数:
214
1.协程 基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞,另外一种情况是该任务计算的时间过长或有一个 ...
分类:
编程语言 时间:
2019-01-14 22:00:17
阅读次数:
221
内存管理分静态内存管理和动态内存管理(根据大小又分2种) 静态内存管理:创建、删除、初始化、解绑、申请和释放。初始化内存池是属于静态内存管理,与创建内存池不同的是,此处内存池对象所使用的内存空间是由用户指定的一个缓冲区空间,用户把缓冲区的指针传递给内存池对象控制块,其余的初始化工作与创建内存池相同。 ...
分类:
其他好文 时间:
2019-01-12 00:21:43
阅读次数:
240
协程 Coroutine 据说, python官方没有协程这个玩意儿 ,这是程序员自己鼓捣出来的, 更加轻量级(任务切换不是由自己的代码实现,而不是操作系统)也叫微线程, 用这个可以让自己的程序对CPU 的占用率更高!避免被操作系统剥夺CPU的使用权. 对比操作系统控制线程的切换,用户在单线程内控制 ...
分类:
其他好文 时间:
2019-01-04 21:31:44
阅读次数:
163
1.并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制) 1.该任务发生了阻塞 2.该任务计算的时间过长或有一个优先级更高的程序替代了它 第二种情况并不能提升效率,只是为了让cpu能够雨露均沾,实现看起来所有任务都被“同时”执行的效果,如果 ...
分类:
编程语言 时间:
2018-12-25 20:21:26
阅读次数:
186
一、CPU上下文切换 1、上下文切换,有时也称做进程切换或任务切换,是指CPU从一个进程或线程切换到另一个进程或线程。 2、vmstat是一个常用的系统性能分析工具,主要用来分析系统内存使用情况,也常用来分析CPU上下文切换和中断的次数。 例:vmstat -w 上下文切换需要特别关注的四列内容: ...
分类:
其他好文 时间:
2018-12-23 11:09:10
阅读次数:
145
引言 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞,另外一种情况是该任务计算的时间过长 ...
分类:
其他好文 时间:
2018-11-13 21:46:49
阅读次数:
138
1 非抢占式和可抢占式内核 为了简化问题,我使用嵌入式实时系统uC/OS作为例子 首先要指出的是,uC/OS只有内核态,没有用户态,这和Linux不一样 多任务系统中, 内核负责管理各个任务, 或者说为每个任务分配CPU时间, 并且负责任务之间的通讯. 内核提供的基本服务是任务切换. 调度(Sche ...
分类:
系统相关 时间:
2018-11-01 15:03:53
阅读次数:
262
上下文切换(有时也称做进程切换或任务切换)是指 CPU 从一个进程或线程切换到另一个进程或线程。 进程(有时候也称做任务)是指一个程序运行的实例。在 Linux 系统中,线程就是能并行运行并且与他们的父进程(创建他们的进程)共享同一地址空间(一段内存区域)和其他资源的轻量级的进程。 上下文是指某一时 ...
分类:
其他好文 时间:
2018-10-24 15:56:04
阅读次数:
235