很久以前只有单线程后来发展成多线程而现在单线程又开始流行nodejs
1现在的单线程的语言和最早的单线程有什么区别2还有多线程是否依然在流行,会否被单线程取代?
学习是最好的投资!
最早的单线程都是同步的代码,效率非常低,程序一直阻塞等待同步结果。 但是现在说的单线程,例如nodejs, 却是异步的,不会等待调用结果,转而去执行另外的事情,当调用结果返回之后再继续执行获取结果之后的程序。
现在
nodejs
多线程当然流行啦,多线程的程序的效率在并发量高的时候比单线程当然高许多,还有任务切分的时候也有优势。当然单线程为了充分利用机器资源,也开发了利用cpu多核的idea。 例如nodejs的cluster模块。 但是cluster模块虽然利用多核起了核数对应的进程数,然而每个进程都是相互独立的,共享一个端口。但是如果是java等多进程的程序的话,进程是有共享的资源的,这样占用的内存会少。
cluster
各有优势,只会各自弥补,向前发展。可能会出现新的模式来取代吧!个人观点。 希望对你有帮助!!
附 cluster的示例
const cluster = require('cluster'); const http = require('http'); const numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', (worker, code, signal) => { console.log(`worker ${worker.process.pid} died`); }); } else { // Workers can share any TCP connection // In this case it is an HTTP server http.createServer((req, res) => { res.writeHead(200); res.end('hello world\n'); }).listen(8000); }
该程序会起和cpu核数相对应的node进程,监听在8000端口
最早的单线程都是同步的代码,效率非常低,程序一直阻塞等待同步结果。 但是
现在
说的单线程,例如nodejs
, 却是异步的,不会等待调用结果,转而去执行另外的事情,当调用结果返回之后再继续执行获取结果之后的程序。多线程当然流行啦,多线程的程序的效率在并发量高的时候比单线程当然高许多,还有任务切分的时候也有优势。当然单线程为了充分利用机器资源,也开发了利用cpu多核的idea。 例如
nodejs
的cluster
模块。 但是cluster
模块虽然利用多核起了核数对应的进程数,然而每个进程都是相互独立的,共享一个端口。但是如果是java等多进程的程序的话,进程是有共享的资源的,这样占用的内存会少。各有优势,只会各自弥补,向前发展。可能会出现新的模式来取代吧!个人观点。 希望对你有帮助!!
附
cluster
的示例该程序会起和cpu核数相对应的node进程,监听在8000端口