理解Go协程与并发 协程 Go语言里创建一个协程很简单,使用go关键字就可以让一个普通方法协程化: Copy package main import ( "fmt" "time" ) func main(){ fmt.Println("run in main coroutine.") for i:= ...
分类:
其他好文 时间:
2020-06-15 17:51:33
阅读次数:
53
1.基础知识 1.1 进程上下文与中断上下文介绍 1.1.1 进程上下文 (1)进程上文:其是指进程由用户态切换到内核态是需要保存用户态时cpu寄存器中的值,进程状态以及堆栈上的内容,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。 (2)进程下文:其是指切换到内核 ...
分类:
系统相关 时间:
2020-06-15 14:12:17
阅读次数:
50
Go语言中的并发编程 并发与并行 并发:同一时间段内执行多个任务(你在用微信和两个女朋友聊天)。 并行:同一时刻执行多个任务(你和你朋友都在用微信和女朋友聊天)。 Go语言的并发通过goroutine实现。goroutine类似于线程,属于用户态的线程,我们可以根据需要创建成千上万个goroutin ...
分类:
编程语言 时间:
2020-06-15 00:01:04
阅读次数:
85
协程 本质:在单线程下,由用户自己控制一个任务遇到io阻塞了就切换另外一个任务去执行,以此来提升效率 目的:减少操作系统切换的开销,规避IO操作,将一条线程中的io操作 降到最低 定义 协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的。 特点: 必须在只有一个单线程里实现并发 修改共享 ...
分类:
其他好文 时间:
2020-06-14 11:05:44
阅读次数:
47
中断上下文的切换 进程上下文的切换 异常处理过程: 下面从逻辑上完整走一遍中断处理过程(结合中断上下文的切换,以定时器中断为例,假设从用户态进入中断): 1. 定时器连接在8259A可编程中断控制器(PIC,Programmable Interrupt Controller)的0号IRQ线上,0号I ...
分类:
系统相关 时间:
2020-06-13 17:30:14
阅读次数:
59
1、普通系统调用 系统调用是一种特殊的中断,中断分外部中断(硬件中断)和内部中断(软件中断),内部中断?称为异常(Exception),异常?分为故障(fault)和陷阱(trap),系统调?就是利?陷阱(trap)这种软件中断?式是主动从?户态进?内核态的。但是,一般从用户态进入内核态,是由两种方 ...
分类:
系统相关 时间:
2020-06-12 20:05:32
阅读次数:
62
【前言】 这是一次充满曲折与反转的问题分析,资料很少,代码很多,经验很少,概念很多,当内核态,用户态,DIF,LBA,大页内存,SGL,RDMA,NVME和SSD一起迎面而来的时候,问题是单点的意外,还是群体的无奈? 为了加深记忆,也为了分享出来给人以启示,特记录这次问题分析过程。 【现象】 同事L ...
分类:
其他好文 时间:
2020-06-10 13:19:41
阅读次数:
66
如何迅速分析出系统CPU的瓶颈在哪里? 想分析处理CPU性能问题, 首先我们需要了解CPU性能指标. CPU性能指标 CPU使用率 用户CPU使用率, 包括用户态(user)和低优先级用户态(nice). 该指标过高说明应用程序比较繁忙. 系统CPU使用率, CPU在内核态运行的时间百分比(不含中断 ...
分类:
系统相关 时间:
2020-06-08 00:50:47
阅读次数:
105
1) 根据中断的来源可分为内部中断和外部中断,内部中断的中断源来自于CPU内部(软件中断指令、溢出、除法错误等),例如操作系统从用户态切换到内核态需要借助CPU内部的软件中断,外部中断的中断源来自于CPU外部,由外设触发。 2) 根据中断是否可以被屏蔽,中断可分为可屏蔽中断和不可屏蔽中断,可屏蔽中断 ...
分类:
系统相关 时间:
2020-06-04 01:22:58
阅读次数:
104
1 概述 linux常见的五大进程间通信方式包括:共享内存、管道、消息队列、信号量、Socket。 2 共享内存 定义:将同一块物理内存映射到不同的进程的虚拟地址空间中,实现不同进程间对同一资源的共享。 特定:(1)不用从用户态到内核态的频繁切换和拷贝数据,直接从内存中读取就可以。 (2)共享内存是 ...
分类:
系统相关 时间:
2020-05-28 01:02:42
阅读次数:
79