登录
首页 >  Golang >  Go问答

如何避免受 CPU 限制的 WASM 函数影响 UI 线程?

来源:stackoverflow

时间:2024-02-26 20:15:21 122浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《如何避免受 CPU 限制的 WASM 函数影响 UI 线程?》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我在 .wasm 文件中公开了一个 go 函数,可以从 js 访问:

app.computePrimes = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
    handler := js.FuncOf(func(this js.Value, args []js.Value) interface{} {
        resolve := args[0]
        // Commented out because this Promise never fails
        //reject := args[1]

        // Now that we have a way to return the response to JS, spawn a goroutine
        // This way, we don't block the event loop and avoid a deadlock
        go func() {
            app.console.Call("log", "starting")

            for i := 2; i < 100000; i++ {
                if big.NewInt(int64(i)).ProbablyPrime(20) && i > 20000 {
                    app.console.Call("log", i)
                }
            }

            app.console.Call("log", "finishing")
            resolve.Invoke("Done")
        }()

        // The handler of a Promise doesn't return any value
        return nil
    })

    return js.Global().Get("Promise").New(handler)
})

尽管它返回一个 promise 并在 goroutine 中执行 cpu 绑定部分,但在 web 端感觉一切都在主 ui 线程上运行。我读过一些有关 wwebassembly 开发状况的文章,看来多线程工作负载尚未普及。

网络工作者是执行此类任务的唯一首选方式吗?


解决方案


是的,我想你自己回答了这个问题。只要 WASM 本身不支持诸如精简线程/并发之类的东西(这将使 Go 对 WASM 的支持更具吸引力),您就必须自己使用 Web Workers 或基于 Web Workers 的包来完成此操作。 p>

您可能已经找到了:

终于介绍完啦!小伙伴们,这篇关于《如何避免受 CPU 限制的 WASM 函数影响 UI 线程?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>