关于激情(Passion)
激情不是情绪,激情是一种天性,是生命力的象征,有了激情,才有灵感的火花,才有鲜明的个性,才有人际关系中的强烈感染力,也有了解决问题的魅力和方法。
rss
关于创业(Entrepreneurship)环境
在盛大创新院成立了半年后,这个世界上有了李开复的创新工场;再过了一年,有了百度的创业者俱乐部。这是好事情。意味着我的心愿:“致力于改善国内的创业环境”,有了越来越多的同盟者。
史记:货殖列传序
《史记 货殖列传序》 - 我觉得这篇可作为“藏富于民”的论述。 对老百姓 - “故善者因之,其次利道之,其次教诲之,其次整齐之,最下者与之争”。 最后这个“最下者与之争”,让我觉得太史公简直是天朝穿越过去的。
关于博士(Doctor)
什么是博士?美国犹他大学的助理教授Matt Might,用这组图解释,博士学位到底是什么意思。他说,每年都有新生的入学教育,但是有些观点语言说不清楚,不如画图。这组图真的很好懂,而且一点没错,博士就应该是图中的意思。老子说 大道至简 ,可是真的要很简单地表达出来,却是非常难的一件事。
关于本次 Gmail 改版
很不幸,我觉得 Gmail 改版后似乎比以前慢了不少。这不是好现象。当然这有可能只是国内如此。
关于诚信(Integrity)- 唐骏学历门
社会必须强化对于造假的问责,提高造假者的职业的、社会的、舆论的、心理的各方面成本,才会使得假币驱逐良币的现象,得到缓解。幸运的是,进入了网络时代,牛皮从吹起到吹破,周期已经越来越短了。无形当中,网络已经提高了造假的成本。
关于政治(Politics)- 为什么我们需要谈政治
很多人不希望你关心政治、考虑太多问题,因为这样他们能更好控制你。你可以选择不关心,过自己的日子,没有问题,那是你自己的事,我不会因此对你有异议。但当你长大,开始遭遇各种困难、对世界的状况感到失望、因邪恶独裁者的滑稽而迁移,或有些重要东西被夺走时,你才能发现,原来政治对你影响如此深刻。
联络方式
FoldUnfold Table of Contents Microblog IM Microblog Twitter: http://twitter.com/xushiwei (@xushiwei) Buzz: http://www.google.com/profiles/xushiweizh#buzz Sina: http://t.sina.com.cn/xushiweizh/ IM Gtalk/Email: xushiweizh (at) gmail (dot) com MSN: xswzh (at) hotmail (dot) com
C++ Memory Management Innovation: GC Allocator
FoldUnfold Table of Contents Introduction What is GC Allocator? Concept of GC Allocator A Better Smart Pointer Creating a GC Allocator and Allocating Memory Should Be Very Fast Another Way of GC GC Allocator Implementations: ScopeAlloc and AutoFreeAlloc Faster Than All Allocators You Ever Seen The Infrastructure of ScopeAlloc and AutoFreeAlloc GCAlloc: A Huge Stack No Multithreaded Locks When to use AutoFreeAlloc Open Source Applications based on GC Allocator A Word File Writer Rope based on GC Allocator STL Containers based on GC Allocator Related Topics To obtain a copy of this paper in pdf format click here (or from google code). Another copy is also available on codeproject in html format. Introduction Most of the C++ programmers do not benefit from Garbage Collection technique...
这些广告的受益者并非本人,而是 Wikidot。我个人从不掩饰对 Wikidot 的喜爱,它给了我想要的东西,我们为它赚点广告费,我觉得这是很正常事情。Wikidot 也是很有原则的一家公司,她对客户的尊重是我喜爱她的另一个重要原因,要想进入本站而不出现广告很简单,注册个 Wikidot 账号,在浏览本站的时候保持登录状态就好了,你会看到一个很干净的界面。
许哥,能说一下,go和erlang的一些比较吗?
哪一个更适合大规模的实际应用?
多谢
如果你不考虑具体的使用场景,建议选择 golang。erlang 的适用范围相对狭窄。
两者目前都重服务端,所以客户端开发来说,都不是特别适合,如果非要用,建议用 golang。
服务端开发,如果团队比较小,喜欢函数式编程,而且网络模块偏重 io,逻辑不复杂,用 erlang 可以获得比 go 更好的性能,目前 go 语言在性能上还没做过非常大力度的优化。其他情况我建议用 golang。
我用erlang做过手机银行的服务端,效果还是不错的
多谢许哥这么详细的说明,这样就清楚怎么选择了,多谢
在执行单元的公平调度方面,还是请指点下:
比如我要做一个管理大量设备(成千上万)的程序,需要即时监控设备状态,erlang进程的公平调度性是适合这个场景的,golang在这点上机制如何?
许哥您好:
看到您编写的winx, 我有一个问题请教, 为什么MFC的消息映射要提供_AFXDLL和非_AFXDLL两个implementation, 比如
#ifdef _AFXDLL
#define DECLARE_MESSAGE_MAP() private: static const AFX_MSGMAP_ENTRY _messageEntries[]; protected: static AFX_DATA const AFX_MSGMAP messageMap; static const AFX_MSGMAP* PASCAL _GetBaseMessageMap(); virtual const AFX_MSGMAP* GetMessageMap() const;
#else
#define DECLARE_MESSAGE_MAP() private: static const AFX_MSGMAP_ENTRY _messageEntries[]; protected: static AFX_DATA const AFX_MSGMAP messageMap; virtual const AFX_MSGMAP* GetMessageMap() const; #endif
为什么直接用非_AFXDLL的版本的不行? 非要用一个函数_GetBaseMessageMap()去取基类的messageMap?
许哥您好,请教一个问题:
golang http.ResponseWriter 的Write()方法,服务的QPS由3万降到7000。附上我的测试代码和boom测试结果:
现在我测试到的情况是这样的,如果我只填写http的header,那么服务端的处理速度很高,单纯测试(没有业务逻辑),QPS能达到3万,但是如果我添加payload,那么QPS就只能达到不足8000了,只有6000的样子。这个落差太大了,我尝试直接使用http.ResponseWriter 接口中的Write方法写入一个[50]Byte,效果一样。根据我的测试和你们的分析,应该是IO的问题,不过这个也太夸张了。
func handleHeader(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Length", "0") }
func handlePayload50(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Length", "50") w.Write(make([]byte, 50)) }
func handlePayload128(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Length", "128") w.Write(make([]byte, 128)) }
func handlePayload1024(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Length", "1024") w.Write(make([]byte, 1024)) }
func main() { runtime.GOMAXPROCS(runtime.NumCPU()) http.HandleFunc("/header", handleHeader) http.HandleFunc("/payload50", handlePayload50) http.HandleFunc("/payload128", handlePayload128) http.HandleFunc("/payload1024", handlePayload1024) host := fmt.Sprintf("%s:%d", "0.0.0.0", 5001) http.ListenAndServe(host, nil) }
and the boom test result: ./boom -c 1000 -n 500000 -cpus 12 XXXXXX/header 500000 / 500000 Boooooooooooooooooooooooooooooooooooooooooooooooooooo! 100.00 %
Summary: Total: 12.8799 secs. Slowest: 3.2799 secs. Fastest: 0.0018 secs. Average: 0.0239 secs. Requests/sec: 38810.4907
Status code distribution: [200] 499875 responses
Response time histogram: 0.002 [1] | 0.330 [499306] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ 0.657 [0] | 0.985 [0] | 1.313 [312] | 1.641 [0] | 1.969 [0] | 2.297 [0] | 2.624 [0] | 2.952 [0] | 3.280 [256] |
Latency distribution: 10% in 0.0125 secs. 25% in 0.0172 secs. 50% in 0.0216 secs. 75% in 0.0257 secs. 90% in 0.0295 secs. 95% in 0.0327 secs. 99% in 0.0549 secs.
./boom -c 500 -n 500000 -cpus 12 XXXXXX/payload128 500000 / 500000 Boooooooooooooooooooooooooooooooooooooooooooooooooooo! 100.00 %
Summary: Total: 62.5205 secs. Slowest: 3.0714 secs. Fastest: 0.0112 secs. Average: 0.0601 secs. Requests/sec: 7997.1501 Total Data Received: 63998208 bytes. Response Size per Request: 128 bytes.
Status code distribution: [200] 499986 responses
Response time histogram: 0.011 [1] | 0.317 [495652] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎ 0.623 [0] | 0.929 [0] | 1.235 [4092] | 1.541 [0] | 1.847 [0] | 2.153 [0] | 2.459 [0] | 2.765 [0] | 3.071 [241] |
Latency distribution: 10% in 0.0405 secs. 25% in 0.0436 secs. 50% in 0.0481 secs. 75% in 0.0546 secs. 90% in 0.0629 secs. 95% in 0.0731 secs. 99% in 0.1054 secs.
许哥:go如何通过一个字串动态创建对象?
比如java里面,有myObject = class.forName("my.com.myObject");
假设有一个mysql库字串是 "github/mysql",我如何像java一样动态得到这个mysql的接口或结构?比如假设可以 sqltest=newObject("github/mysql")?
Post preview:
Close preview