推荐开发者使用线程安全函数作为Native侧子线程与UI主线程的通信手段。
如果线程安全函数确实不能满足开发需要,开发者可以使用libuv库自定义Loop然后通过uv_async_send方法进行线程间通信。
另外,libuv库中的uv_queue_work接口也可以实现线程间通信,但存在以下弊端:
- 使用uv_queue_work作为线程间通信的手段时,execute回调中一般实现为空任务,没有任何维测信息,一旦异步任务不回调,定位将很困难。这种方式不仅低效,而且还增加了发生故障时定位问题的难度。
- 它会破坏底层的数据可信性,uv_queue_work函数仅用于抛异步任务,异步任务的execute回调被提交到线程池后会经过调度执行,因此并不保证多次提交的任务之间的时序关系。
更多libuv库的方案策略可以查看API参考:libuv。