分类 计算机基础 下的文章

协程

“协程”(Coroutine)概念最早由 Melvin Conway 于1958年提出。协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换。相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低。总的来说,协程为协同任务提供了一种运行时抽象,这种抽象非常适合于协同多任务调度和数据流处理。在现代操作系统和编程语言中,因为用户态线程切换代价比内核态线程小,协程成为了一种轻量级的多任务模型。

从编程角度上看,协程的思想本质上就是控制流的主动让出(yield)和恢复(resume)机制,迭代器常被用来实现协程,所以大部分的语言实现的协程中都有 yield 关键字,比如 Python、PHP、Lua。但也有特殊比如 Go 就使用的是通道来通信。

Linux 下常见 IO 模型

常见的网络 I/O 模型大概有四种:

  1. 同步阻塞 IO(Blocking IO)
  2. 同步非阻塞 IO(Non-blocking IO)
  3. IO 多路复用(IO Multiplexing)
  4. 异步 IO(Asynchronous IO)

三类加密算法

加密技术是对信息进行编码和解码的技术。在加密算法上可分为对称加密、非对称加密和单向不可逆加密三类算法。

进程、线程、协程

概述

先了解并发和并行的区别:

  1. —并发(concurrency):逻辑上具备同时处理多个任务的能力。
  2. 并行(parallesim):物理上在同一时刻执行多个并发任务,依赖多核处理器等物理设备。

多线程或多进程是并行的基本条件,但单线程也可用协程做到并发。通常情况下,用多进程来实现分布式和负载平衡,减轻单进程垃圾回收压力;用多线程抢夺更多的处理器资源;用协程来提高处理器时间片利用率。现代系统中,多核 cpu 可以同时运行多个不同的进程或者线程。