Skip to content

TAG_COLLECTION //

并发编程

共有 32 篇笔记使用了这个 Tag。

context 语句

Context(上下文),可以理解为一种协调 Go 协程的东西 —— 我们可以创建、运行一个 Go 协程,缺乏一种传递取消信号和截止时间的机制,便引入了 Context。

多级缓存和MESI

首先,CPU 访问速度和主内存的运行速度一定存在差异,且 CPU 的速度快于内存的速度。假设没有缓存机制,那么代码的执行顺序——从内存中读取指令和必要数据等,然后运算,接着等待内存传输数据,这边等待的时候,就严重降低了运算速度——我们的运算上限被内存的运算速度给限制住了!

临界区和临界资源

是共享状态进行访问或修改的代码片段,要求在任意时刻,线程执行到这个片段的时候,只有唯一一种执行流可以正确执行以保证数据的不变性

锁

虽然一直在说“锁可以保护临界区资源”,但是忽然发现笔记中没有任何一篇专门说锁的??!

条件变量

与锁不同,它感觉更偏向是线程之间通讯的一种方式 —— A 因需要等待某条件为真后才能继续运行于是进入 waiting 状态;此时 B 执行到设置这个条件为真后, A 继续运行

线程和进程

简述一下之间的区别与联系 (假设使用时间片轮转的抢占式调度方式,其实还有优先级调度、多级反馈队列(MLFQ)、完全公平调度(CFS)等调度方式

异步

把异步理解成为一种目的 —— 不需要通过阻塞当前线程来等待某一操作的完成,而是继续执行接下来的逻辑,直到那个操作完成之后回调通知当前线程。

Atomic

std::atomic, 用于定义原子变量, 允许多个线程按照 C++ 内存模型进行读写等操作. 一般用于线程之间共享状态等.

Golang 协程通道

通道(Channel)用于协程之间的数据通信,通道操作自身可安全地并发使用,并为对应的发送和接收提供同步关系,但不会自动消除其他共享状态的数据竞态。通道本质上是一个队列(FIFO)

Work Stealing

当前的实现是, 优先执行自己队列中的任务, 如果空闲的话, 先尝试从全局的 InjectionQueue 中尝试接单, 如果还是空闲, 则尝试从其他 Worker 的队列中领任务. 如果还是空, 则进入休眠,交出资源,等待唤醒.

Released under the MIT License.