我最近开始研究nodeJs。但是在单线程概念之间弄混了,因为在不同的页面上使用global或var关键字变量,而这些变量是使用required包含的。下面是我的代码。
var express = require("express");
var app = express();
var mysql = require("mysql");
var comm_fun = requre("./common_functions");
var global_res = ''; // variable to send the reponse back to browser from any function
var global_req = '';// variables to save request data
app.listen(1234,function(req,res){
console.log("server started");
global_res = res;
global_req = req;
mysql = '';// code to have mysql connection in this variable
});现在,我可以在不同的文件中使用mysql,global_res和global_req变量。但这些是否会影响另一个请求的值,因为它们是全局的。
例如,请求1的"global_req“值为1,
同时请求2也来了
请求%2的"global_req“值为%2
这两个请求是否会在任何时候发生冲突。当第二个请求到达时,可以在任何时间点将"global_req“从1覆盖到2。或者两者都是不同的请求,并且在任何时间点都不会冲突。
谢谢,
发布于 2018-08-07 15:47:59
是的,这里有一个非常简单的场景:
关于Node单线程的争论仅适用于您的应用程序是纯CPU绑定的情况,然而,如果大多数Node应用程序都是IO绑定的,那么它们就是有效的多线程。问题在于我们不能保证回调返回的顺序,考虑到这一点,创建竞争条件相当简单,例如
let global_id = 0;
...
app.use(() => global_id++);
app.post('/create', async (req, res) => {
try {
const exists = db.query(`SELECT id FROM table WHERE id = ${global_id}`);
if (!exists) {
db.query(`INSERT INTO ....`);
}
} catch (e) {
return next(e);
}
});如果两个请求同时命中/create端点,则两个请求都成功的可能性很小(至少是正确的)。
https://stackoverflow.com/questions/51721029
复制相似问题