栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

V8多线程功能

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

V8多线程功能

您可能需要一些

libuv
魔术才能使node.js / v8 线程从 另一个 线程执行回调。这将涉及:

  • 一个uv_async_t句柄,它充当v8主线程的唤醒调用:

    extern uv_async_t       async;
  • 一个

    uv_async_init
    结合了uv_async_t到V8默认循环调用:

    uv_async_init(uv_default_loop(), &async, async_cb_handler);
  • 还有一个事件处理程序,它将对 v8主线程 上的uvasync_t事件起作用:

    void async_cb_handler(uv_async_t *handle) {NotifInfo *notif;mutex::scoped_lock sl(zqueue_mutex);while (!zqueue.empty()) {    notif = zqueue.front();    handleNotification(notif);    delete notif;    zqueue.pop();}

    }

  • 最后,您可能还需要一个互斥锁保护的队列,以便能够将某些数据从c ++附加线程传递到Node / V8:

    extern mutex        zqueue_mutex;

    extern std::queue zqueue;

  • 当您的 C ++线程 发生问题时,只需将新项目推送到互斥锁保护的队列中,然后调用

    uv_async_send
    即可唤醒V8的默认事件循环(所谓的“主线程”)以处理该项目(然后可以调用您的Javascript回调)

    void ozw_watcher_callback(OpenZWave::Notification const *cb, void *ctx) {NotifInfo *notif = new NotifInfo();notif->type   = cb->GetType();notif->homeid = cb->GetHomeId();...mutex::scoped_lock sl(zqueue_mutex);zqueue.push(notif);uv_async_send(&async);

    }

(代码片段摘自用于OpenZWave的官方Node.JS插件)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/595053.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号