头脑发热地搞山寨:StacklessIO YY篇

Eve这传说中的神game早有听闻,而最近俺一个不小心,被它一篇初步公布自家IO技术的文章刺中了某条神经,于是开始去了解里面提到的stacklessIO;

然后,google大神表示,其实这货还没公布出来,OTL

再回头去查阅尽可能有关联的文章,个人观点着眼于,那些文章里提到的这种技术(stacklessIO),主要一个是可以利用起cpu的多核来分担单机上的IO消耗,另一个就是通过分布在多核上处理IO,提高单机的网络进出吞吐水平;

当然,eve里面的实现俺无从得知,他们用了自家的c实现去解决一些性能瓶颈问题,这也是俺这次蛋疼范围之外的东西,于是,根据俺的收集所得,还有之前刚好对stackless的使用经验,加上一定程度的头脑发热,开始动手山寨了:

目的:

目的很简单,在几乎纯python的范围内,山寨stacklessIO的策略,以单台计算机为单位,以集中式IO为使用实例做前提,提升它的利用率。

分析:

首先,因为俺不是搞纯理论或者模型分析,于是俺的实现工具被自己的习惯工具所限制:python,而且不做c扩展。

基于所选工具,就不得不提到python那GIL,有这东西在,要用上多核,俺想到的只有最原始的手段:multiprocessing;

然后就是进程间的通信手段,multiprocessing里面提供的进程间通信就算了,其它通信手段还有;

在这里,俺做一个简单的定义,从连接里接受信息的一方作为生产者(Producers),整合接受的信息的一方作为消费者(Consumer);

那么,模型的初步就是:

(Multi-core cup)

IO process(Producers)-----<----------->Main Process(Consumer)

                                                |

...                                      ------

当然,每一个生产者或者消费者,都是一个逍遥自在的进程,而且地位上,IO和Main其实可以说是对等的;

接下来,是进程间通信手段,进程间通信手段不止一种,multiprocessing也提供了进程间通信手段,自己YY一堆也可以;

这里由于旨在提高单机利用率,所以用了共享内存块;

于是:

(Multi-core cup)

IO process(Producers)---->(share memory)<----------->Main Process(Consumer)

                                                |

...                                      ------

然后,考虑到这个东西并不一定是一个项目的核心模块,只是一个供别人使用的工具,还需要考虑用户:

(Multi-core cup)

IO process(Producers)---->(share memory)<----------->Main Process(Consumer)<------>User

                                                |

...                                      ------

这样,模块的使用者,其实已经不需要直接面对网络方面的IO,他们只知道,有一堆数据从不知道哪里来了,要不停地处理,

更重要的是,从不知道哪里接受并塞进这些数据的处理消耗,并不需要由用户进程来负担。

末尾补充一点就是,既然叫stacklessIO,那么stackless就少不了,这不是仅仅为了了名字而用这个东西,

因为python各种微线程库里,stackless是个好东西,原始快速,缺点是它修改了python

(至于实际上修改了哪些东西俺这懒人没咋考究过,抱歉了),而且也太原始了,扩展库不多,

于是并不是那么好使好用的一个工具;

实际上用的是stackless socket,在此向stackless socket隆重致谢;

不过对于俺来说,原始快速就够了;事实上,每一个IO process进程里,stackless socket的表现非常不错;

于是俺也不好意思再对人家做什么封装,原始直接暴力地用上去就是了,

于是,最终出来的简模:

(Multi-core cup)

stackless-socket process(Producers)---->(share memory)

                                                                 |

stackless-socket process(Producers)---->(share memory)

                                                                 |                         <----------->Main Process(Consumer)<------>User

stackless-socket process(Producers)---->(share memory)

                                                                 |

...                                                      ------>




这满满的山寨气息。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值