异步编程模式
Table of Contents
大约有两种基本的异步编程模式
- Task-Based Asynchronous Pattern 基于任务的异步模式
以一个单个的方法(Task)来表示异步操作的发起和完成, 它引入了 Async, Await 这样的关键字
任务执行会返回一个 Promise 或 Future, 代表未来执行的结果
- Event-Based Asynchronous Pattern 基于事件的异步模式
以事件驱动的模式来提供异步的行为,主要使用了事件回调和事件处理器的方式,类似于观察者模式的结构
它遵循了著名的好莱坞原则 “Don't call us, we'll call you” - “别打电话给我们,我们会打给你的”
在具体实现上,有三种模型
- 多进程
RPC 远程过程调用就是典型的用例,在多个进程间通过网络消息传输来进行异步调用,例如 Ajax。
在一台主机的多进程还可以使用众多的 IPC 方法,我觉得最好用的还是 UDS (Unix Domain Socket) 其地址族为 AF_UNIX,Socket type 可以是 SOCK_STREAM(类比 TCP) 和 SOCK_DGRAM(类比 UDP), SCOK_SEQPACKET(类比 SCTP)
nc -U /tmp/test.sock -u -l
lsof /tmp/test.sock
nc /tmp/test.sock -u
- -U 参数表示 Unix Socket file
- -l 参数表示 Listen 侦听接入的连接
- -u 参数表示 SOCK_DGRAM
代码示例
- 多线程
为打破顺序执行和阻塞等待的限制,引入多个线程,在不同的线程中执行任务,自然能做到异步,不过要考虑到线程安全和线程间的通讯,最常用的就是线程池,线程队列和线程之间的锁的使用
- 协程
协程是指在单个线程上运行的过程,它们可以暂停和重启,
Comments |0|
Category: Uncategorized