Jamal的博客

Python-yield漫谈

Python的yield其实是一个生成器的实现,在python里其实是一个协程的作用,协程的概念很早就被提了出来,在很多较新的语言里面都能看到这样的实现(Python,go,erlang等),在老一些的语言(C/java等)还没有支持这样的语法。
谈到协程,就不得不谈谈高性能服务器设计,我们知道,在高性能的web服务器设计上,一般都有这么几种架构:多进程、多线程、异步非阻塞,我们先来说这几种:

1. 多进程

大名鼎鼎的Apache就是多进程的典型实现,主进程只负责监听请求和管理连接,由子进程来负责具体的业务处理,这样设计的好处是当一个子进程挂掉的时候,并不会影响主进程的使用,但是这样使用的缺点也是显而易见的,在高并发请求的场景下,apache很容易创建出成千上万的子进程,子进程的创建占用大量的资源,进程切换带来了大量的上下文切换时间。但是这样的好处也是很明显的,在并发量不是很大而且是以计算为主的请求上,由于此时没有大量io,多进程处理显然是更有利的一种方式。

2. 多线程

多线程其实是多进程的一种改进,好处是可以共享进程的内存空间