Skip to content

Instantly share code, notes, and snippets.

View yihuang's full-sized avatar
🏠
Working from home

yihuang yihuang

🏠
Working from home
  • Shenzhen, China
  • 13:00 (UTC -12:00)
View GitHub Profile
@yihuang
yihuang / cocos2d-x-bug.lua
Created October 17, 2012 10:33
cocos2d-x-bug.lua
function some_expensive_function()
local tbl = {}
for i=1,100 do
table.insert(tbl, i)
end
local a = {}
for i=1,100 do
for idx,f in ipairs(tbl) do
a[i] = idx / (1/24)
end

build

$ ghc temp.hs

Note

Don't use -O2 when build temp.hs, would stack overflow.

@yihuang
yihuang / hugozhu.hs
Created December 24, 2012 05:53
要实现一个API,API内部有两个http接口A,B并发调用,如果都在200ms内返回,则合并结果输出,如果B比A慢,且B耗时超过200ms,则丢弃B调用只返回A结果. 要一直等到A返回(可以最多等5秒),而B如果比A还慢,则最多等200ms-A的耗时
import Control.Concurrent (forkIO, threadDelay)
import Control.Concurrent.MVar (MVar, newEmptyMVar, putMVar, takeMVar)
import System.Random (randomRIO)
import System.Timeout (timeout)
import Data.Time.Clock.POSIX (getPOSIXTime)
-- 开一个线程执行 io ,返回等待结果的Action
spawn :: IO a -> IO (IO a)
spawn io = do
mresult <- newEmptyMVar

Haskell微线程实现

用户线程与系统线程关系

  • 一对一 (传统线程实现)
  • 多对一 (gevent)
  • 一对多 (并行计算)
@yihuang
yihuang / uwsgi-gevent-benchmark.rst
Last active July 17, 2019 10:20
uwsgi gevent benchmark
CPU:Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz (X8)
OS:debian7
PYTHON:python2.7.3
GEVENT:gevent-1.0rc1
UWSGI:1.9.15-dev

hello world

@yihuang
yihuang / main.py
Created December 6, 2013 13:40
kivy strange behaviour, child widget don't move with parent widget.
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.clock import Clock
class PongGame(Widget):
def __init__(self, **kwargs):
super(PongGame, self).__init__(**kwargs)
Clock.schedule_interval(self.move, 1 / 60.)
@yihuang
yihuang / bench.py
Created July 18, 2014 03:44
benchmark cython property
import pyximport; pyximport.install()
class PurePlayer(object):
def __init__(self):
self.__age = 0
def set_age(self, value):
self.__age = value
def get_age(self):
@yihuang
yihuang / redis_asyncio.py
Last active August 3, 2020 11:01
benchmark gevent vs asyncio on python3.4
import asyncio
import hiredis
d = {}
def process(req):
cmd = req[0].lower()
if cmd==b'set':
d[req[1]] = req[2]
return b"+OK\r\n"
@yihuang
yihuang / observe_evaluation.hs
Created November 24, 2015 02:51
Try to observe evaluation process.
import System.IO.Unsafe (unsafePerformIO)
import Prelude hiding (foldr, foldl, foldl')
import System.Mem(performGC)
import GHC.HeapView
instance Monoid Integer where
mappend = (+)
mempty = 0
foldr f z l = result
@yihuang
yihuang / test.sh
Last active December 24, 2015 10:12
$ echo 'sdf&gt;sdf&gt;' | ./a.out
text|regex:1:1 'sdf&gt;sdf&gt;
'