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