Is it possible somehow do multithreading in NodeJS?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
So i'm have an app with Socket.IO
which purpose is to search some data on different sites. Something like crawler... The main problem is that the search process is too long and while it happens my app stucks... For example if one user starts to search second need to wait until first completed...
Each site which need to be searched is represented as a separate class so i do something like:
selected_sites.forEach(function(site_name)
var site = new sites[site_name];
site.on('found', function(data)
socket.emit('found', data);
);
site.on('not_found', function()
socket.emit('not_found', 'Nothing found at ' + site.getSiteName());
);
site.search(socket_data.params);
);
Is it possible somehow to move the "class body | search progress" "somewhere else | in a new thread" so that event loop not be blocked while search in progress?
node.js multithreading
|
show 3 more comments
So i'm have an app with Socket.IO
which purpose is to search some data on different sites. Something like crawler... The main problem is that the search process is too long and while it happens my app stucks... For example if one user starts to search second need to wait until first completed...
Each site which need to be searched is represented as a separate class so i do something like:
selected_sites.forEach(function(site_name)
var site = new sites[site_name];
site.on('found', function(data)
socket.emit('found', data);
);
site.on('not_found', function()
socket.emit('not_found', 'Nothing found at ' + site.getSiteName());
);
site.search(socket_data.params);
);
Is it possible somehow to move the "class body | search progress" "somewhere else | in a new thread" so that event loop not be blocked while search in progress?
node.js multithreading
1
How issite.search()
implemented? I find it hard to believe that it would be scraping a site synchronously.
– mscdex
Apr 8 '16 at 17:26
1
No, you can't run a new thread in Node.js, it's single threaded. You can usecluster
package to run node process on each processor Core, or move complex functions to external node app and do async calls to it from the main app.
– alexmac
Apr 8 '16 at 17:27
@mscdex there is 11 sites which provides from 300 to 500 results each not including the pagination... Insearch
method are few requests in which callback are other requests and so on until it reaches the item...
– Kin
Apr 8 '16 at 17:28
I agree with @mscdex,site.search
is probably asynchronous. What happens if you putconsole.log(site_name)
before callingsite.search
?It'll probably output all 11 site names before even start crawling the first item.
– goenning
Apr 8 '16 at 17:35
@goenning, but as I said before in the search method there a lot ofrequest
, like 500-600 for each site. In general here is this situation zef.me/blog/4561/node-js-and-the-case-of-the-blocked-event-loop
– Kin
Apr 8 '16 at 18:37
|
show 3 more comments
So i'm have an app with Socket.IO
which purpose is to search some data on different sites. Something like crawler... The main problem is that the search process is too long and while it happens my app stucks... For example if one user starts to search second need to wait until first completed...
Each site which need to be searched is represented as a separate class so i do something like:
selected_sites.forEach(function(site_name)
var site = new sites[site_name];
site.on('found', function(data)
socket.emit('found', data);
);
site.on('not_found', function()
socket.emit('not_found', 'Nothing found at ' + site.getSiteName());
);
site.search(socket_data.params);
);
Is it possible somehow to move the "class body | search progress" "somewhere else | in a new thread" so that event loop not be blocked while search in progress?
node.js multithreading
So i'm have an app with Socket.IO
which purpose is to search some data on different sites. Something like crawler... The main problem is that the search process is too long and while it happens my app stucks... For example if one user starts to search second need to wait until first completed...
Each site which need to be searched is represented as a separate class so i do something like:
selected_sites.forEach(function(site_name)
var site = new sites[site_name];
site.on('found', function(data)
socket.emit('found', data);
);
site.on('not_found', function()
socket.emit('not_found', 'Nothing found at ' + site.getSiteName());
);
site.search(socket_data.params);
);
Is it possible somehow to move the "class body | search progress" "somewhere else | in a new thread" so that event loop not be blocked while search in progress?
node.js multithreading
node.js multithreading
asked Apr 8 '16 at 17:21
KinKin
1,908113672
1,908113672
1
How issite.search()
implemented? I find it hard to believe that it would be scraping a site synchronously.
– mscdex
Apr 8 '16 at 17:26
1
No, you can't run a new thread in Node.js, it's single threaded. You can usecluster
package to run node process on each processor Core, or move complex functions to external node app and do async calls to it from the main app.
– alexmac
Apr 8 '16 at 17:27
@mscdex there is 11 sites which provides from 300 to 500 results each not including the pagination... Insearch
method are few requests in which callback are other requests and so on until it reaches the item...
– Kin
Apr 8 '16 at 17:28
I agree with @mscdex,site.search
is probably asynchronous. What happens if you putconsole.log(site_name)
before callingsite.search
?It'll probably output all 11 site names before even start crawling the first item.
– goenning
Apr 8 '16 at 17:35
@goenning, but as I said before in the search method there a lot ofrequest
, like 500-600 for each site. In general here is this situation zef.me/blog/4561/node-js-and-the-case-of-the-blocked-event-loop
– Kin
Apr 8 '16 at 18:37
|
show 3 more comments
1
How issite.search()
implemented? I find it hard to believe that it would be scraping a site synchronously.
– mscdex
Apr 8 '16 at 17:26
1
No, you can't run a new thread in Node.js, it's single threaded. You can usecluster
package to run node process on each processor Core, or move complex functions to external node app and do async calls to it from the main app.
– alexmac
Apr 8 '16 at 17:27
@mscdex there is 11 sites which provides from 300 to 500 results each not including the pagination... Insearch
method are few requests in which callback are other requests and so on until it reaches the item...
– Kin
Apr 8 '16 at 17:28
I agree with @mscdex,site.search
is probably asynchronous. What happens if you putconsole.log(site_name)
before callingsite.search
?It'll probably output all 11 site names before even start crawling the first item.
– goenning
Apr 8 '16 at 17:35
@goenning, but as I said before in the search method there a lot ofrequest
, like 500-600 for each site. In general here is this situation zef.me/blog/4561/node-js-and-the-case-of-the-blocked-event-loop
– Kin
Apr 8 '16 at 18:37
1
1
How is
site.search()
implemented? I find it hard to believe that it would be scraping a site synchronously.– mscdex
Apr 8 '16 at 17:26
How is
site.search()
implemented? I find it hard to believe that it would be scraping a site synchronously.– mscdex
Apr 8 '16 at 17:26
1
1
No, you can't run a new thread in Node.js, it's single threaded. You can use
cluster
package to run node process on each processor Core, or move complex functions to external node app and do async calls to it from the main app.– alexmac
Apr 8 '16 at 17:27
No, you can't run a new thread in Node.js, it's single threaded. You can use
cluster
package to run node process on each processor Core, or move complex functions to external node app and do async calls to it from the main app.– alexmac
Apr 8 '16 at 17:27
@mscdex there is 11 sites which provides from 300 to 500 results each not including the pagination... In
search
method are few requests in which callback are other requests and so on until it reaches the item...– Kin
Apr 8 '16 at 17:28
@mscdex there is 11 sites which provides from 300 to 500 results each not including the pagination... In
search
method are few requests in which callback are other requests and so on until it reaches the item...– Kin
Apr 8 '16 at 17:28
I agree with @mscdex,
site.search
is probably asynchronous. What happens if you put console.log(site_name)
before calling site.search
?It'll probably output all 11 site names before even start crawling the first item.– goenning
Apr 8 '16 at 17:35
I agree with @mscdex,
site.search
is probably asynchronous. What happens if you put console.log(site_name)
before calling site.search
?It'll probably output all 11 site names before even start crawling the first item.– goenning
Apr 8 '16 at 17:35
@goenning, but as I said before in the search method there a lot of
request
, like 500-600 for each site. In general here is this situation zef.me/blog/4561/node-js-and-the-case-of-the-blocked-event-loop– Kin
Apr 8 '16 at 18:37
@goenning, but as I said before in the search method there a lot of
request
, like 500-600 for each site. In general here is this situation zef.me/blog/4561/node-js-and-the-case-of-the-blocked-event-loop– Kin
Apr 8 '16 at 18:37
|
show 3 more comments
4 Answers
4
active
oldest
votes
node.js does not allow you to run more threads of Javascript execution at the same time. A single node.js process only runs one Javascript thread of execution at a time. Because of asynchronous I/O, multiple Javascript operations may be "in flight" at any given time, but only one is actually running at any given time (while the others may be waiting for I/O operations to complete).
The usual way to solve a problem where you want some longer running and/or CPU intensive application to be run in the background while your server is free to handle incoming requests is to move the time consuming operation into it's own node.js process (often using the child process module) and then allow those two processes to share information as required, either via a database or via some interprocess communication like sockets.
If you have multiple CPU intensive operations, you can fire up multiple secondary processes or you can use the node.js clustering module in order to take maximum advantage of all CPUs in the host computer.
You should know that if most of your code is just networking or file I/O, then that can all be done with asynchronous operations and your node.js server will scale quite well to doing many different things in parallel. If you have CPU intensive operations (lots of parsing or calculations), then you will want to start up multiple processes in order to more effectively utilize multiple CPUs and let the system time slice the work for you.
Is there any tutorials on how tostart up multiple processes
cause this is the thing i need to...
– Kin
Apr 8 '16 at 18:43
@Kin - Both the links in my answer (the clustering link and the child process link) show code examples. And, if you search for nodejs clustering or nodejs child process, there are thousands of articles. Probably you want to make one master nodejs process for your crawler and then start up a pool of child processes that each crawl a site and report back results.
– jfriend00
Apr 8 '16 at 19:53
add a comment |
NodeJS is single threaded, but you are able to create clusters. I recommend reading: http://www.sitepoint.com/how-to-create-a-node-js-cluster-for-speeding-up-your-apps/
With this, you are able to share server handles and use Inter-process communication to communicate with the parent Node process.
add a comment |
So you have a few options here. Depending on what exactly the search function does, one of these options would work the best:
Node.js child processes
Writing the
search
method asynchronously. If it is implemented in javascript, than this should be possible using process.nextTick(See this question); if it is a C/C++ implementation, it's more complicated, and child processes would probably be the way to go.
add a comment |
Since this Question is 2 years old now I though Ill give an update on that.
Most answers here are based on the claim, that NodeJS is single threaded, which is only partly true.
NodeJS is Event driven with a single threaded event loop. While this is still the case, NodeJS was recently extended with Multi-threading support (since NodeJS v10.5.0) in form of so called Worker-Threads.
Those features are still experimental, so it is probably better to stick to Child Processes for now.
I just wanted to give an update on that, since NodeJS is now considered multithreaded.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f36505666%2fis-it-possible-somehow-do-multithreading-in-nodejs%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
node.js does not allow you to run more threads of Javascript execution at the same time. A single node.js process only runs one Javascript thread of execution at a time. Because of asynchronous I/O, multiple Javascript operations may be "in flight" at any given time, but only one is actually running at any given time (while the others may be waiting for I/O operations to complete).
The usual way to solve a problem where you want some longer running and/or CPU intensive application to be run in the background while your server is free to handle incoming requests is to move the time consuming operation into it's own node.js process (often using the child process module) and then allow those two processes to share information as required, either via a database or via some interprocess communication like sockets.
If you have multiple CPU intensive operations, you can fire up multiple secondary processes or you can use the node.js clustering module in order to take maximum advantage of all CPUs in the host computer.
You should know that if most of your code is just networking or file I/O, then that can all be done with asynchronous operations and your node.js server will scale quite well to doing many different things in parallel. If you have CPU intensive operations (lots of parsing or calculations), then you will want to start up multiple processes in order to more effectively utilize multiple CPUs and let the system time slice the work for you.
Is there any tutorials on how tostart up multiple processes
cause this is the thing i need to...
– Kin
Apr 8 '16 at 18:43
@Kin - Both the links in my answer (the clustering link and the child process link) show code examples. And, if you search for nodejs clustering or nodejs child process, there are thousands of articles. Probably you want to make one master nodejs process for your crawler and then start up a pool of child processes that each crawl a site and report back results.
– jfriend00
Apr 8 '16 at 19:53
add a comment |
node.js does not allow you to run more threads of Javascript execution at the same time. A single node.js process only runs one Javascript thread of execution at a time. Because of asynchronous I/O, multiple Javascript operations may be "in flight" at any given time, but only one is actually running at any given time (while the others may be waiting for I/O operations to complete).
The usual way to solve a problem where you want some longer running and/or CPU intensive application to be run in the background while your server is free to handle incoming requests is to move the time consuming operation into it's own node.js process (often using the child process module) and then allow those two processes to share information as required, either via a database or via some interprocess communication like sockets.
If you have multiple CPU intensive operations, you can fire up multiple secondary processes or you can use the node.js clustering module in order to take maximum advantage of all CPUs in the host computer.
You should know that if most of your code is just networking or file I/O, then that can all be done with asynchronous operations and your node.js server will scale quite well to doing many different things in parallel. If you have CPU intensive operations (lots of parsing or calculations), then you will want to start up multiple processes in order to more effectively utilize multiple CPUs and let the system time slice the work for you.
Is there any tutorials on how tostart up multiple processes
cause this is the thing i need to...
– Kin
Apr 8 '16 at 18:43
@Kin - Both the links in my answer (the clustering link and the child process link) show code examples. And, if you search for nodejs clustering or nodejs child process, there are thousands of articles. Probably you want to make one master nodejs process for your crawler and then start up a pool of child processes that each crawl a site and report back results.
– jfriend00
Apr 8 '16 at 19:53
add a comment |
node.js does not allow you to run more threads of Javascript execution at the same time. A single node.js process only runs one Javascript thread of execution at a time. Because of asynchronous I/O, multiple Javascript operations may be "in flight" at any given time, but only one is actually running at any given time (while the others may be waiting for I/O operations to complete).
The usual way to solve a problem where you want some longer running and/or CPU intensive application to be run in the background while your server is free to handle incoming requests is to move the time consuming operation into it's own node.js process (often using the child process module) and then allow those two processes to share information as required, either via a database or via some interprocess communication like sockets.
If you have multiple CPU intensive operations, you can fire up multiple secondary processes or you can use the node.js clustering module in order to take maximum advantage of all CPUs in the host computer.
You should know that if most of your code is just networking or file I/O, then that can all be done with asynchronous operations and your node.js server will scale quite well to doing many different things in parallel. If you have CPU intensive operations (lots of parsing or calculations), then you will want to start up multiple processes in order to more effectively utilize multiple CPUs and let the system time slice the work for you.
node.js does not allow you to run more threads of Javascript execution at the same time. A single node.js process only runs one Javascript thread of execution at a time. Because of asynchronous I/O, multiple Javascript operations may be "in flight" at any given time, but only one is actually running at any given time (while the others may be waiting for I/O operations to complete).
The usual way to solve a problem where you want some longer running and/or CPU intensive application to be run in the background while your server is free to handle incoming requests is to move the time consuming operation into it's own node.js process (often using the child process module) and then allow those two processes to share information as required, either via a database or via some interprocess communication like sockets.
If you have multiple CPU intensive operations, you can fire up multiple secondary processes or you can use the node.js clustering module in order to take maximum advantage of all CPUs in the host computer.
You should know that if most of your code is just networking or file I/O, then that can all be done with asynchronous operations and your node.js server will scale quite well to doing many different things in parallel. If you have CPU intensive operations (lots of parsing or calculations), then you will want to start up multiple processes in order to more effectively utilize multiple CPUs and let the system time slice the work for you.
edited Apr 8 '16 at 17:38
answered Apr 8 '16 at 17:33
jfriend00jfriend00
443k55581625
443k55581625
Is there any tutorials on how tostart up multiple processes
cause this is the thing i need to...
– Kin
Apr 8 '16 at 18:43
@Kin - Both the links in my answer (the clustering link and the child process link) show code examples. And, if you search for nodejs clustering or nodejs child process, there are thousands of articles. Probably you want to make one master nodejs process for your crawler and then start up a pool of child processes that each crawl a site and report back results.
– jfriend00
Apr 8 '16 at 19:53
add a comment |
Is there any tutorials on how tostart up multiple processes
cause this is the thing i need to...
– Kin
Apr 8 '16 at 18:43
@Kin - Both the links in my answer (the clustering link and the child process link) show code examples. And, if you search for nodejs clustering or nodejs child process, there are thousands of articles. Probably you want to make one master nodejs process for your crawler and then start up a pool of child processes that each crawl a site and report back results.
– jfriend00
Apr 8 '16 at 19:53
Is there any tutorials on how to
start up multiple processes
cause this is the thing i need to...– Kin
Apr 8 '16 at 18:43
Is there any tutorials on how to
start up multiple processes
cause this is the thing i need to...– Kin
Apr 8 '16 at 18:43
@Kin - Both the links in my answer (the clustering link and the child process link) show code examples. And, if you search for nodejs clustering or nodejs child process, there are thousands of articles. Probably you want to make one master nodejs process for your crawler and then start up a pool of child processes that each crawl a site and report back results.
– jfriend00
Apr 8 '16 at 19:53
@Kin - Both the links in my answer (the clustering link and the child process link) show code examples. And, if you search for nodejs clustering or nodejs child process, there are thousands of articles. Probably you want to make one master nodejs process for your crawler and then start up a pool of child processes that each crawl a site and report back results.
– jfriend00
Apr 8 '16 at 19:53
add a comment |
NodeJS is single threaded, but you are able to create clusters. I recommend reading: http://www.sitepoint.com/how-to-create-a-node-js-cluster-for-speeding-up-your-apps/
With this, you are able to share server handles and use Inter-process communication to communicate with the parent Node process.
add a comment |
NodeJS is single threaded, but you are able to create clusters. I recommend reading: http://www.sitepoint.com/how-to-create-a-node-js-cluster-for-speeding-up-your-apps/
With this, you are able to share server handles and use Inter-process communication to communicate with the parent Node process.
add a comment |
NodeJS is single threaded, but you are able to create clusters. I recommend reading: http://www.sitepoint.com/how-to-create-a-node-js-cluster-for-speeding-up-your-apps/
With this, you are able to share server handles and use Inter-process communication to communicate with the parent Node process.
NodeJS is single threaded, but you are able to create clusters. I recommend reading: http://www.sitepoint.com/how-to-create-a-node-js-cluster-for-speeding-up-your-apps/
With this, you are able to share server handles and use Inter-process communication to communicate with the parent Node process.
answered Apr 8 '16 at 17:26
Hard TacosHard Tacos
295218
295218
add a comment |
add a comment |
So you have a few options here. Depending on what exactly the search function does, one of these options would work the best:
Node.js child processes
Writing the
search
method asynchronously. If it is implemented in javascript, than this should be possible using process.nextTick(See this question); if it is a C/C++ implementation, it's more complicated, and child processes would probably be the way to go.
add a comment |
So you have a few options here. Depending on what exactly the search function does, one of these options would work the best:
Node.js child processes
Writing the
search
method asynchronously. If it is implemented in javascript, than this should be possible using process.nextTick(See this question); if it is a C/C++ implementation, it's more complicated, and child processes would probably be the way to go.
add a comment |
So you have a few options here. Depending on what exactly the search function does, one of these options would work the best:
Node.js child processes
Writing the
search
method asynchronously. If it is implemented in javascript, than this should be possible using process.nextTick(See this question); if it is a C/C++ implementation, it's more complicated, and child processes would probably be the way to go.
So you have a few options here. Depending on what exactly the search function does, one of these options would work the best:
Node.js child processes
Writing the
search
method asynchronously. If it is implemented in javascript, than this should be possible using process.nextTick(See this question); if it is a C/C++ implementation, it's more complicated, and child processes would probably be the way to go.
edited May 23 '17 at 12:31
Community♦
11
11
answered Apr 8 '16 at 17:36
Chandler FreemanChandler Freeman
384321
384321
add a comment |
add a comment |
Since this Question is 2 years old now I though Ill give an update on that.
Most answers here are based on the claim, that NodeJS is single threaded, which is only partly true.
NodeJS is Event driven with a single threaded event loop. While this is still the case, NodeJS was recently extended with Multi-threading support (since NodeJS v10.5.0) in form of so called Worker-Threads.
Those features are still experimental, so it is probably better to stick to Child Processes for now.
I just wanted to give an update on that, since NodeJS is now considered multithreaded.
add a comment |
Since this Question is 2 years old now I though Ill give an update on that.
Most answers here are based on the claim, that NodeJS is single threaded, which is only partly true.
NodeJS is Event driven with a single threaded event loop. While this is still the case, NodeJS was recently extended with Multi-threading support (since NodeJS v10.5.0) in form of so called Worker-Threads.
Those features are still experimental, so it is probably better to stick to Child Processes for now.
I just wanted to give an update on that, since NodeJS is now considered multithreaded.
add a comment |
Since this Question is 2 years old now I though Ill give an update on that.
Most answers here are based on the claim, that NodeJS is single threaded, which is only partly true.
NodeJS is Event driven with a single threaded event loop. While this is still the case, NodeJS was recently extended with Multi-threading support (since NodeJS v10.5.0) in form of so called Worker-Threads.
Those features are still experimental, so it is probably better to stick to Child Processes for now.
I just wanted to give an update on that, since NodeJS is now considered multithreaded.
Since this Question is 2 years old now I though Ill give an update on that.
Most answers here are based on the claim, that NodeJS is single threaded, which is only partly true.
NodeJS is Event driven with a single threaded event loop. While this is still the case, NodeJS was recently extended with Multi-threading support (since NodeJS v10.5.0) in form of so called Worker-Threads.
Those features are still experimental, so it is probably better to stick to Child Processes for now.
I just wanted to give an update on that, since NodeJS is now considered multithreaded.
answered Nov 15 '18 at 13:02
NullDevNullDev
2,07811129
2,07811129
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f36505666%2fis-it-possible-somehow-do-multithreading-in-nodejs%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
How is
site.search()
implemented? I find it hard to believe that it would be scraping a site synchronously.– mscdex
Apr 8 '16 at 17:26
1
No, you can't run a new thread in Node.js, it's single threaded. You can use
cluster
package to run node process on each processor Core, or move complex functions to external node app and do async calls to it from the main app.– alexmac
Apr 8 '16 at 17:27
@mscdex there is 11 sites which provides from 300 to 500 results each not including the pagination... In
search
method are few requests in which callback are other requests and so on until it reaches the item...– Kin
Apr 8 '16 at 17:28
I agree with @mscdex,
site.search
is probably asynchronous. What happens if you putconsole.log(site_name)
before callingsite.search
?It'll probably output all 11 site names before even start crawling the first item.– goenning
Apr 8 '16 at 17:35
@goenning, but as I said before in the search method there a lot of
request
, like 500-600 for each site. In general here is this situation zef.me/blog/4561/node-js-and-the-case-of-the-blocked-event-loop– Kin
Apr 8 '16 at 18:37