一个新手去琢磨这个简直就是作死,起因就是因为我目前正在复制的项目是使用python写一个服务器,这个服务器是是典型计算密集型...一开始的想法就是将服务器分成两个进程,前面进程负责读取客户端的委托计算数据,然后通过写入Redis数据库,然后使用Queue作为通信传输机制,告诉后台进程,有数据了,可以去读取了。
这时候后台进程就去Redis中读取所需要数据,操作完以后再写入另外一个Redis数据库,而前台进程中会有一个线程一直在等待这个Redis中数据,专门负责将计算数据结果发送回去。
优化方案1:
自己做测试,使用timeit,发送使用Redis数据库传输数据没有Queue传输数据块(其实是Redis快,因为我自己测试错误了,坑了自己一天)。然后我想把Redis这边去掉,然后直接使用Queue将客户端接收到的数据,直接发送到后台线程。
(计算数据中有可能出现当下计算不了的,也许要之后才能计算,或者一直不能计算的“脏”数据,但是不能丢掉,因为不知道这个数据什么时候会突然有效,所以要一直测试这个遗留的数据)
这时候在后台专门开一个线程中接收工作,然后接收到内存中...正在计算的线程只要从内存中读取就可以了(相比从Redis读取快很多,我直接把Queue接收数据这部分所消耗的时间给忘记了),但是这个优化方案,后来还加入了一些其他东西,比如多级缓存,主要是放脏数据的,反正是我自己搞了一天,最后发现两个问题:
1.同步问题
2.速度其实没有比原来快多少....
优化方案2:
然后吃饭的时候各种想,突然想起来可以用mmap,这时候为了避免放上面的错误,认真做了一下测试...1MB的数据量的情况下
使用mmap比使用Redis快了大概20倍.这个数字相当可观..
然后没了