|
最近想把nodejs跟quickfix結(jié)合一下,搞點(diǎn)高大上的東西,踩了一個(gè)星期的坑,記流水帳如下:
1.編寫node-fix插件,把quickfix加載進(jìn)來,注冊(cè)回調(diào)函數(shù)
2.nodejs內(nèi)部調(diào)用V8內(nèi)核是一個(gè)單線程。
3.nodejs通過uv跟v8交互。
4. uv_default_loop()指向v8事件循環(huán)
5.uv的 uv_async_send 不保證每次都能投遞到v8成功。
6.uv的 uv_queue_work 不保證線程安全,即使投遞時(shí)多線程安全了,別忘記還有一個(gè)v8在取。
否則會(huì)報(bào)“uv__has_active_reqs(loop), file src\win\threadpool.c, line 79 ”類似的錯(cuò)。我折騰了幾天,傻X了。
7.最后通過uv_idle_init完成了事件回調(diào)處理。
8.為了提高性能,使用了boost::pool內(nèi)存池,這貨分配成功以后,會(huì)在內(nèi)存塊最開始放了一個(gè)指針,指到下一個(gè)內(nèi)存塊,不知道啥意思。
第一字節(jié)偏偏又是我的指針對(duì)像,搞的程序不停飛掉,錘子!。
9.uv_work_t 不能用結(jié)構(gòu)體新封裝再帶上數(shù)據(jù),可能是對(duì)齊原因,會(huì)錯(cuò)位。用戶數(shù)據(jù)直接放data字段即可。但要注意上面那個(gè)地雷
10.std::queue做PC隊(duì)列,狂push以后,內(nèi)存自動(dòng)增長(zhǎng)不會(huì)下來,發(fā)個(gè)1千萬多萬請(qǐng)求就因?yàn)閮?nèi)存泄露過大 GameOver,后面增加調(diào)速功能,協(xié)調(diào)生產(chǎn)者和消費(fèi)者關(guān)系解決。
|
|