Parallel patterns in C#

写在前面

与C/C++所使用的,传统的基于线程的并行模式不同,C#实现了丰富的并发编程模型,其中以异步模型最为流行。

本文中我们重点讨论C#在发展过程中出现的几种异步编程模型:

  • Async Programming Model(APM)
  • Event-based Async Pattern (EAP)
  • Task-based Async Pattern(TAP)
  • async/await语法糖

异步编程入门

同步模式是最常见,也是最被人熟知的编程模型,每一个任务按顺序执行,前一个任务执行完之后才会执行下一个任务。

异步编程和同步编程不同,程序的执行流程是由“事件”所驱动的。异步编程有两种实现方式,回调与future模式。

回调函数在Javascript中被大量使用,相信大家也都不会陌生。但是大量的回调函数会让代码失去可读性,陷入“Callback hell”。

Promise模式是回调函数的一种“包装”。我们使用一个占位符来表示“未来”将会产生的一个异步处理结果。

这个占位符在不同的语言/框架里面有不同的名字,其定义也不尽相同:

  • Task …
more ...

Twisted Defer and DeferredQueue

写在最前面

这篇文章本来是想用英文写的,但是最近英文水平下降的和狗一样。还是怂一波吧。

写在前面

最近在用Twisted库写一个诡异的项目,具体内容暂且不在这里讨论。在写的过程中,被Twisted里面的一个重要概念 —— defer,折腾的不行。最终通过阅读twisted的部分源码,以及与代码做斗争的丰富经验,最终算是解决了问题。

本文算是使用twisted开发踩坑的一个小小总结,如果一切顺利,后面会有大菜。:)

Twisted介绍

Twisted is an event-driven networking engine written in Python.

Twisted是一个基于事件驱动的网络框架。那么什么是“事件驱动”呢?

事件驱动指的是将事件与事件回调绑定起来,在程序运行时根据实时的事件触发相应的响应的一种机制。

例如select/poll/epoll这些IO复用函数,在文件描述符(fd)可读/可写/出错时,会立即返回,由相应的处理函数来对新事件进行处理。事实上,twisted的事件驱动功能,正是由这些IO复用函数提供的。

但与IO复用函数不同的是,twisted中的事件可以是“更高层次的事件”,即对网络的读 …

more ...