天天看點

libuv 使用中的一些個人認識

--------------我會跟進糾正或補充,有錯誤的請各位指教!!!

1、如果用libuv,那就盡量都用它,循環,檔案讀寫,線程等;

2、隻有uv_async_t是線程安全的,配套uv_async_init(loop, &async, async_cb);      uv_async_send(&async); 

        async_cb中必須uv_close((uv_handle_t*)&async, close_cb);   //如果async沒有關閉,消息隊列是會阻塞的,async是螢幕的一種

3、線程ID 擷取

  uv_thread_t id = uv_thread_self(); 

4、不要在回調函數中設定死循環,否則會導緻其它回調無法執行!(個人感覺,libuv的工作都是以工作項形式進行的挂靠到loop上的,一個接着一個的處理)

5、建立子程序用spawn,不要fork(曾遇到fork的子程序中調用uv_queue_work,不執行,原因不知到,有懂的前輩請留言指教, 有個前輩給我留言說libuv不應該與fork一起用)

6、句柄和buf部分,不要使用局部變量,會損壞棧資料,導緻程式崩潰!

    (親身經曆,網上有些人釋出的代碼,句柄使用的局部變量,而沒有用static或malloc,雖然運作一下沒問題,但一會就會出問題的!

        查了半天自己的代碼查不出問題,去看libuv實作,uv_write和uv_run的實作,發現裡面有工作隊列queue,void*類型的,直接指派和使用,沒有另開辟存儲,

         是以如果是局部變量的話,在加入工作隊列時,對應記憶體就無效了,還去使用,會損壞棧,導緻崩潰!) -- 20161107

繼續閱讀