te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>Using Javascript node.js how do I parallel process For loops? - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Using Javascript node.js how do I parallel process For loops? - Stack Overflow

programmeradmin2浏览0评论

I only started to learn javascript 2 days ago so I'm pretty new. I've written code which is optimal but takes 20 minutes to run. I was wondering if there's a simple way to parallel process with for loops e.g.

for (x=0; x<5; x++){ processor 1 do ...

for (x=5; x<10; x++){ processor 2 do ...

I only started to learn javascript 2 days ago so I'm pretty new. I've written code which is optimal but takes 20 minutes to run. I was wondering if there's a simple way to parallel process with for loops e.g.

for (x=0; x<5; x++){ processor 1 do ...

for (x=5; x<10; x++){ processor 2 do ...

Share Improve this question asked Aug 18, 2015 at 17:38 oa262oa262 711 gold badge1 silver badge2 bronze badges 2
  • 4 Javascript is strictly single-threaded. If you have pute-bound work, you should use a different language. – SLaks Commented Aug 18, 2015 at 17:41
  • It is possible to run JavaScript functions in parallel on the GPU. I can do this using GPU.js, for example. – Anderson Green Commented Jun 1, 2024 at 18:55
Add a ment  | 

4 Answers 4

Reset to default 5

Since the OP wants to process the loop in parallel, the async.each() function from the async library is the ideal way to go.

I've had faster execution times using async.each pared to forEach in nodejs.

web workers can run your code in parallel, but without sharing memory/variables etc - basically you pass input parameters to the worker, it works and gives you back the result.

http://www.html5rocks./en/tutorials/workers/basics/

You can find nodejs implementations of this, example

https://www.npmjs./package/webworker-threads

OR, depending on how your code is written, if you're waiting on a lot of asynchronous functions, you can always rewrite your code to run faster (eg using event queuess instead of for loops - just beware of dependencies, order of execution, etc)

You might want to take a look at the async.js project, especially the parallel function.

Important quote about it :

parallel is about kicking-off I/O tasks in parallel, not about parallel execution of code. If your tasks do not use any timers or perform any I/O, they will actually be executed in series. Any synchronous setup sections for each task will happen one after the other. JavaScript remains single-threaded.

Example :

async.parallel([
    function(callback){
        setTimeout(function(){
            callback(null, 'one');
        }, 200);
    },
    function(callback){
        setTimeout(function(){
            callback(null, 'two');
        }, 100);
    }
],
// optional callback
function(err, results){
    // the results array will equal ['one','two'] even though
    // the second function had a shorter timeout.
});

To run code in parallel or want to make requests in parallel you can use Promise.all or Promise.settled.

Make all the queries in parallel (asynchronously). Resulting in each query firing at the same time.

let promise1 = new Promise((resolve) => setTimeout(() => resolve('any-value'), 3000);
let responses = await Promise.all([promise1, promise2, promise3, ...])
for(let response of responses) {
  // format responses
  
  // respond to client
}

For more examples check out this article

发布评论

评论列表(0)

  1. 暂无评论