小编Sag*_*war的帖子

为什么回调函数中的react state(array)为空?为什么它不使用外部范围的更新值?

这个问题难倒了我。我试图将值附加到现有数组,但在 onmessage 回调中,每次调用回调时状态都是一个空数组!我不明白为什么!任何帮助表示赞赏。

  • 反应版本:16.12.0
  • 节点版本:10.16.3

代码片段:

const Example = () => {

  const [state, setState] = useState([]);

  useEffect(() => {
    axios.get("/data").then((resp) => setState(resp.data)); // Array of length of 50

    const eventSource = new EventSource("/event");

    eventSource.onmessage = (e) => {
      console.log(state); // [] - Empty array
      const data = JSON.parse(e.data);
      setState([data, ...state]); // End result - state is array of length 1
    }

    return () => eventSource.close();

  }, []);

  console.log(state); // Array of length 50

  // Table rendered with 50 elements …
Run Code Online (Sandbox Code Playgroud)

javascript callback server-sent-events reactjs react-hooks

6
推荐指数
1
解决办法
3389
查看次数

使用intel TBB的低效fibonacci系列比非线程实现慢得多

当我使用我的i7-6700HQ处理器的所有8个逻辑内核时,我的并行化版本的fibonacci实现(效率低,只是为了比较库的性能)比普通的低效实现慢得多,这是一个惊喜.与非并行实现相比,处理器风扇开始变得混乱,处理时间非常慢.

这个例子直接来自英特尔的TBB教程 - https://www.threadingbuildingblocks.org/tutorial-intel-tbb-task-based-programming

这是我的代码

#include <tbb/task_group.h>
#include <chrono>
#include <iostream>

#define FIB_NUM 40

long fib1(int n)
{
    if(n < 2) return n;

    else
    {
        int x, y;
        tbb::task_group g;
        g.run([&]{x=fib1(n - 1);});
        g.run([&]{y=fib1(n - 2);});
        g.wait();
        return x + y;
    }
}

long fib2(int n)
{
    return n < 2? n : fib2(n - 1) + fib2(n - 2);
}

int main()
{
    auto t1 = std::chrono::high_resolution_clock::now();
    std::cout << fib2(FIB_NUM) << std::endl;
    auto t2 = std::chrono::high_resolution_clock::now();
    std::cout << (t2 …
Run Code Online (Sandbox Code Playgroud)

c++ parallel-processing multithreading tbb

3
推荐指数
1
解决办法
397
查看次数