Kotlin 协程

为什么需要协程

在JavaScript ES6中引入了Promise对象,以及async和await关键字,使得异步编程变得容易了:

const child_process = require('child_process');
const worker = require('worker_threads');

function getData() {
    return new Promise((resolve, reject) => {
        // 这里开启了一个新的工作线程,工作耗时2s
        const th = new worker.Worker(__filename);
        th.once('message', data => {
            resolve(data);
        })
    });
}

async function asyncTask() {
    var data = await getData();
    console.log('主线程', worker.threadId, ': 很明显,工作线程计算完毕了,结果是多少呢,我已经返回给调用者了');
    return data
}

function main() {
    console.log('主线程', worker.threadId, ': 开始你的表演show');
    asyncTask().then(data => {
        console.log('主线程', worker.threadId, ': 我当然知道结果是', data);
    });
    console.log('主线程', worker.threadId, ': 你慢慢来,别着急哈!');
}

if (worker.isMainThread) {
    main();
} else {
    console.log('工作线程', worker.threadId, ': 开始堵塞');
    child_process.execSync(`sleep 2`);
    console.log('工作线程', worker.threadId, ': 我好了');
    worker.parentPort.postMessage(2020)
}

/*
主线程 0 : 开始你的表演show
主线程 0 : 你慢慢来,别着急哈!
工作线程 1 : 开始堵塞
主线程 0 : 很明显,工作线程计算完毕了,结果是多少呢,我已经返回给调用者了
主线程 0 : 我当然知道结果是 2020
工作线程 1 : 我好了
*/

猜你喜欢

转载自www.cnblogs.com/develon/p/12743779.html