context 语句
Context(上下文),可以理解为一种协调 Go 协程的东西 —— 我们可以创建、运行一个 Go 协程,缺乏一种传递取消信号和截止时间的机制,便引入了 Context。
TAG_COLLECTION //
共有 15 篇笔记使用了这个 Tag。
Context(上下文),可以理解为一种协调 Go 协程的东西 —— 我们可以创建、运行一个 Go 协程,缺乏一种传递取消信号和截止时间的机制,便引入了 Context。
select用于监听多个channel
工作池,一种并发设计,其中有两个主要概念 - 工人:干工作的工人 - 工作:分配的任务
一个重点在关注数据上的建模. 原先最朴素的做法是把生产和消费是串行并且集成在同一个模块内 —— 即生产完成后直接进行消费, 那么此时生产和消费在执行时序上是紧密关联的.
打算稍微说说 Job System 中的 threadlocal 声明的变量的用途
把异步理解成为一种目的 —— 不需要通过阻塞当前线程来等待某一操作的完成,而是继续执行接下来的逻辑,直到那个操作完成之后回调通知当前线程。
Future, 表示这个结果我会在未来进行消费. 那么它具体怎么生产出来玩无所谓. 我持有 std::future 只是一个消费者而已.
- G:Goroutine,Go协程 - P:Processor,逻辑处理器 - M:Machine,操作系统线程
通道(Channel)用于协程之间的数据通信,通道操作自身可安全地并发使用,并为对应的发送和接收提供同步关系,但不会自动消除其他共享状态的数据竞态。通道本质上是一个队列(FIFO)
把一些可以并行执行的 CPU 工作交给 Worker 去做,比如资产加载、可见性计算、后台统计等。
存储Job数据的地方(看名字也非常显然), 看 API 非常好理解其用法用途, 不过还是稍微说下其中的一些设计
简单说下这个方法的设计, 其实非常的简单, 就是上游业务调用的时候, 可以把一个大的 Range 拆分成若干小的 Chunk 然后进行并行执行.
在 Future 的时候说到, 它表示一个消费者 —— 我在未来可能要消费某个数据.
假设一个线程调用了 Wait() 方法, 那么首先它确乎是会阻止代码继续往下运行, 而是等待任务执行完毕.
当前的实现是, 优先执行自己队列中的任务, 如果空闲的话, 先尝试从全局的 InjectionQueue 中尝试接单, 如果还是空闲, 则尝试从其他 Worker 的队列中领任务. 如果还是空, 则进入休眠,交出资源,等待唤醒.