eurasia and coroutines
上周末的CPyUG上海python聚会, 沈游侠又一次show了他的eurasia框架. 之后javaeye的robbin写博讨论, 然后被nicholasdsj在twitter上发问... 看起来超级热闹.
对于eurasia是不是有那么高的性能, 考虑到沈游侠在娱乐界的地位, 我也不敢随便评价. 总之希望明天会更好, 这也是我们写程序的每个人的美好愿景.
更大的收获还在于对问题的思考, 进程, 线程和协程, 本来就是完全不同的概念, 如今被混在了一起.
进程, 线程是操作系统的概念, 一个多任务操作系统必然有多进程. 线程是可选的, 好处是不同线程可以在进程内共享内存. 教科书都是这么介绍的, 只要操作系统不是那么老掉牙(DOS), 进程们可以同时运行啦.
但是不能忽略的事实是, 单核CPU在同一时间内只能执行一个指令, 那为什么说多任务呢? 仔细一想, 什么进程和线程只不过是CPU按照时间分配而已, 都是些内核玩的把戏.
那么, 按照时间分配是否适合服务器程序呢? 数据在到达网卡之前, 疯狂进程和线程切换只能是两个字: 白干. 不过, 想去掉进程这种玩意, 其他的服务你跑啦? mysql不用啦?
老老实实放弃线程, 或者换一种说法, 放弃系统提供的按照时间切换的线程, 实现自己线程.
OK, 就此打住, 我们再来看看协程
协程的定义可以查看高纳德的 The Art of Computer Programming 或者维基百科, 与协程相对的定义是子例程(应该就是子程序, 好经典的词汇, 让我们回到函数之前的年代)
(这里强调, 协程只是相对于子程序的一种编程概念, 但是到了stackless python中, 却变成了一种替代线程的产品了.)
说白了协程可以自己控制子程序(或者更加现代的说法: 函数)间的切换, 而不像 POSIX pthread 那样按照时间切换. 话说因为GIL的关系, Python的线程确实不敢恭维.
这样说来, 采用stackless python的eurasia的确可以省掉不少CPU资源, 单线程且没有加锁需求.
思路很对.
还有什么可以突破的?
poll和intrrupt模式, 用中文讲就是轮询和中断.
socket的一个相当通用的编程模式就是poll, 就是轮询, 显然不是什么高效的模式. 采用中断模式来驱动协程之间的切换一定会有助于性能的提高. epoll或者IOCP, 应该是已经被验证了的, 有效提高服务器效率的方式.
eurasia如果放在stackless+twisted上, 一定会增色不少.
对于eurasia是不是有那么高的性能, 考虑到沈游侠在娱乐界的地位, 我也不敢随便评价. 总之希望明天会更好, 这也是我们写程序的每个人的美好愿景.
更大的收获还在于对问题的思考, 进程, 线程和协程, 本来就是完全不同的概念, 如今被混在了一起.
进程, 线程是操作系统的概念, 一个多任务操作系统必然有多进程. 线程是可选的, 好处是不同线程可以在进程内共享内存. 教科书都是这么介绍的, 只要操作系统不是那么老掉牙(DOS), 进程们可以同时运行啦.
但是不能忽略的事实是, 单核CPU在同一时间内只能执行一个指令, 那为什么说多任务呢? 仔细一想, 什么进程和线程只不过是CPU按照时间分配而已, 都是些内核玩的把戏.
那么, 按照时间分配是否适合服务器程序呢? 数据在到达网卡之前, 疯狂进程和线程切换只能是两个字: 白干. 不过, 想去掉进程这种玩意, 其他的服务你跑啦? mysql不用啦?
老老实实放弃线程, 或者换一种说法, 放弃系统提供的按照时间切换的线程, 实现自己线程.
OK, 就此打住, 我们再来看看协程
协程的定义可以查看高纳德的 The Art of Computer Programming 或者维基百科, 与协程相对的定义是子例程(应该就是子程序, 好经典的词汇, 让我们回到函数之前的年代)
(这里强调, 协程只是相对于子程序的一种编程概念, 但是到了stackless python中, 却变成了一种替代线程的产品了.)
说白了协程可以自己控制子程序(或者更加现代的说法: 函数)间的切换, 而不像 POSIX pthread 那样按照时间切换. 话说因为GIL的关系, Python的线程确实不敢恭维.
这样说来, 采用stackless python的eurasia的确可以省掉不少CPU资源, 单线程且没有加锁需求.
思路很对.
还有什么可以突破的?
poll和intrrupt模式, 用中文讲就是轮询和中断.
socket的一个相当通用的编程模式就是poll, 就是轮询, 显然不是什么高效的模式. 采用中断模式来驱动协程之间的切换一定会有助于性能的提高. epoll或者IOCP, 应该是已经被验证了的, 有效提高服务器效率的方式.
eurasia如果放在stackless+twisted上, 一定会增色不少.

feed