本篇来说明一下如何使用 libuv 实现, 以及这样做有哪些不足。
笔者没有并没有深入研究过 libuv 这个库, 所以背后原理并不是很了解, 这里只给出如何做。
先初始化一个uv_loop_t和 一个uv_async_t ,之后在附属线程先准备数据, 然后使用uv_async_send()函数发送数据即可。
注意: 这样做有一个缺点, 即 uv_async_t 一次只能保存1个数据, 如果前一个数据没有被使用,然后又来了一个数据,此时前一个数据会被顶掉。 可能会产生内存泄露。
选择一个线程安全的队列可以避免这个问题, 但是笔者并没有找到合适的线程安全的队列库,估计要使用互斥锁,条件变量自己手写一个。
FixIt 主题在启用 JavaScript 的情况下效果**。