--------------我会跟进纠正或补充,有错误的请各位指教!!!
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