当前位置: 首页 > wzjs >正文

保温管有哪些网站做python小学生入门教程

保温管有哪些网站做,python小学生入门教程,做冻品的网站,WordPress三大标签插件Node.js 中 cluster 模块全部 API 详解 1. 模块属性 const cluster require(cluster);// 1. isMaster // 判断当前进程是否为主进程 console.log(是否为主进程:, cluster.isMaster);// 2. isWorker // 判断当前进程是否为工作进程 console.log(是否为工作进程:, cluster.isW…

Node.js 中 cluster 模块全部 API 详解

1. 模块属性

const cluster = require('cluster');// 1. isMaster
// 判断当前进程是否为主进程
console.log('是否为主进程:', cluster.isMaster);// 2. isWorker
// 判断当前进程是否为工作进程
console.log('是否为工作进程:', cluster.isWorker);// 3. schedulingPolicy
// 获取或设置调度策略
// SCHED_NONE: 由操作系统调度
// SCHED_RR: 轮询调度
console.log('当前调度策略:', cluster.schedulingPolicy);
cluster.schedulingPolicy = cluster.SCHED_RR;// 4. workers
// 获取所有工作进程的引用
console.log('工作进程数量:', Object.keys(cluster.workers).length);

2. 主进程方法

// 1. fork()
// 创建新的工作进程
const worker = cluster.fork();// 2. setupMaster([settings])
// 配置主进程
cluster.setupMaster({exec: 'worker.js',      // 工作进程文件args: ['--use', 'http'], // 传递给工作进程的参数silent: false,          // 是否将工作进程的输出重定向到主进程stdio: ['pipe', 'pipe', 'pipe', 'ipc'], // 标准输入输出配置uid: 1000,             // 用户 IDgid: 1000,             // 组 IDinspectPort: 0         // 调试端口
});// 3. disconnect([callback])
// 断开所有工作进程的连接
cluster.disconnect(() => {console.log('所有工作进程已断开连接');
});// 4. settings
// 获取当前配置
console.log('当前配置:', cluster.settings);

3. 工作进程属性

// 1. worker.id
// 获取工作进程 ID
console.log('工作进程 ID:', cluster.worker.id);// 2. worker.process
// 获取工作进程的进程对象
console.log('进程 ID:', cluster.worker.process.pid);// 3. worker.exitedAfterDisconnect
// 判断工作进程是否在断开连接后退出
console.log('是否在断开连接后退出:', cluster.worker.exitedAfterDisconnect);// 4. worker.isDead()
// 判断工作进程是否已死亡
console.log('是否已死亡:', cluster.worker.isDead());// 5. worker.isConnected()
// 判断工作进程是否已连接
console.log('是否已连接:', cluster.worker.isConnected());

4. 工作进程方法

// 1. worker.send(message[, sendHandle][, callback])
// 发送消息给主进程
cluster.worker.send('hello from worker', (err) => {if (err) console.error('发送消息失败:', err);
});// 2. worker.disconnect()
// 断开工作进程连接
cluster.worker.disconnect();// 3. worker.kill([signal])
// 终止工作进程
cluster.worker.kill('SIGTERM');

5. 事件

5.1 主进程事件

// 1. fork
// 当创建新的工作进程时触发
cluster.on('fork', (worker) => {console.log('工作进程已创建:', worker.id);
});// 2. online
// 当工作进程上线时触发
cluster.on('online', (worker) => {console.log('工作进程已上线:', worker.id);
});// 3. listening
// 当工作进程开始监听时触发
cluster.on('listening', (worker, address) => {console.log('工作进程正在监听:', worker.id, address);
});// 4. message
// 当收到工作进程消息时触发
cluster.on('message', (worker, message, handle) => {console.log('收到工作进程消息:', worker.id, message);
});// 5. disconnect
// 当工作进程断开连接时触发
cluster.on('disconnect', (worker) => {console.log('工作进程已断开连接:', worker.id);
});// 6. exit
// 当工作进程退出时触发
cluster.on('exit', (worker, code, signal) => {console.log('工作进程已退出:', worker.id, code, signal);
});// 7. error
// 当工作进程发生错误时触发
cluster.on('error', (worker, code, signal) => {console.log('工作进程错误:', worker.id, code, signal);
});

5.2 工作进程事件

// 1. message
// 当收到主进程消息时触发
cluster.worker.on('message', (message, handle) => {console.log('收到主进程消息:', message);
});// 2. disconnect
// 当工作进程断开连接时触发
cluster.worker.on('disconnect', () => {console.log('工作进程已断开连接');
});// 3. error
// 当工作进程发生错误时触发
cluster.worker.on('error', (code, signal) => {console.log('工作进程错误:', code, signal);
});// 4. exit
// 当工作进程退出时触发
cluster.worker.on('exit', (code, signal) => {console.log('工作进程已退出:', code, signal);
});

6. 完整示例

const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;if (cluster.isMaster) {console.log(`主进程 ${process.pid} 正在运行`);// 配置主进程cluster.setupMaster({exec: 'worker.js',args: ['--use', 'http'],silent: false});// 启动工作进程for (let i = 0; i < numCPUs; i++) {cluster.fork();}// 主进程事件处理cluster.on('fork', (worker) => {console.log('工作进程已创建:', worker.id);});cluster.on('online', (worker) => {console.log('工作进程已上线:', worker.id);});cluster.on('listening', (worker, address) => {console.log('工作进程正在监听:', worker.id, address);});cluster.on('message', (worker, message, handle) => {console.log('收到工作进程消息:', worker.id, message);worker.send('消息已收到');});cluster.on('disconnect', (worker) => {console.log('工作进程已断开连接:', worker.id);});cluster.on('exit', (worker, code, signal) => {console.log('工作进程已退出:', worker.id, code, signal);// 重启工作进程cluster.fork();});cluster.on('error', (worker, code, signal) => {console.log('工作进程错误:', worker.id, code, signal);});// 定期检查工作进程状态setInterval(() => {for (const id in cluster.workers) {const worker = cluster.workers[id];console.log(`工作进程 ${worker.id} 状态:`, {pid: worker.process.pid,isDead: worker.isDead(),isConnected: worker.isConnected(),exitedAfterDisconnect: worker.exitedAfterDisconnect});}}, 5000);// 优雅关闭process.on('SIGTERM', () => {console.log('收到 SIGTERM 信号,开始优雅关闭');for (const id in cluster.workers) {cluster.workers[id].send('shutdown');cluster.workers[id].disconnect();}});
} else {// 工作进程代码const server = http.createServer((req, res) => {res.writeHead(200);res.end(`你好世界,来自工作进程 ${process.pid}\n`);});server.listen(8000);// 工作进程事件处理cluster.worker.on('message', (message) => {console.log('收到主进程消息:', message);if (message === 'shutdown') {server.close(() => {console.log(`工作进程 ${process.pid} 已关闭`);process.exit(0);});}});cluster.worker.on('disconnect', () => {console.log('工作进程已断开连接');});cluster.worker.on('error', (code, signal) => {console.log('工作进程错误:', code, signal);});cluster.worker.on('exit', (code, signal) => {console.log('工作进程已退出:', code, signal);});// 定期发送心跳setInterval(() => {cluster.worker.send('heartbeat');}, 30000);
}

7. 高级用法

// 1. 动态调整工作进程数量
const cluster = require('cluster');
const http = require('http');
const os = require('os');if (cluster.isMaster) {let workerCount = os.cpus().length;console.log(`初始工作进程数量: ${workerCount}`);// 启动工作进程for (let i = 0; i < workerCount; i++) {cluster.fork();}// 动态调整工作进程数量process.on('SIGUSR1', () => {workerCount = Math.max(1, workerCount - 1);console.log(`减少工作进程数量至: ${workerCount}`);const workers = Object.values(cluster.workers);if (workers.length > workerCount) {workers[workers.length - 1].disconnect();}});process.on('SIGUSR2', () => {workerCount = Math.min(os.cpus().length * 2, workerCount + 1);console.log(`增加工作进程数量至: ${workerCount}`);if (Object.keys(cluster.workers).length < workerCount) {cluster.fork();}});
}// 2. 工作进程负载均衡
const cluster = require('cluster');
const http = require('http');
const os = require('os');if (cluster.isMaster) {const workerCount = os.cpus().length;const workers = [];// 启动工作进程for (let i = 0; i < workerCount; i++) {const worker = cluster.fork();workers.push({worker,load: 0,connections: 0});}// 负载均衡http.createServer((req, res) => {// 选择负载最低的工作进程const target = workers.reduce((min, w) => w.load < min.load ? w : min, workers[0]);target.connections++;target.load = target.connections / 100; // 简单的负载计算// 转发请求target.worker.send('request', { url: req.url });}).listen(8000);// 处理工作进程响应cluster.on('message', (worker, message) => {if (message.type === 'response') {const workerInfo = workers.find(w => w.worker.id === worker.id);if (workerInfo) {workerInfo.connections--;workerInfo.load = workerInfo.connections / 100;}}});
}// 3. 工作进程健康检查
const cluster = require('cluster');
const http = require('http');if (cluster.isMaster) {const workers = new Map();// 启动工作进程for (let i = 0; i < 4; i++) {const worker = cluster.fork();workers.set(worker.id, {worker,healthy: true,lastHeartbeat: Date.now()});}// 健康检查setInterval(() => {const now = Date.now();for (const [id, info] of workers) {if (now - info.lastHeartbeat > 30000) {console.log(`工作进程 ${id} 可能已死亡`);info.healthy = false;info.worker.kill();const newWorker = cluster.fork();workers.set(newWorker.id, {worker: newWorker,healthy: true,lastHeartbeat: now});}}}, 5000);// 处理心跳cluster.on('message', (worker, message) => {if (message === 'heartbeat') {const info = workers.get(worker.id);if (info) {info.healthy = true;info.lastHeartbeat = Date.now();}}});
}

cluster 模块的主要特点:

  1. 支持多核 CPU 并行处理
  2. 提供完整的事件系统
  3. 支持进程间通信
  4. 支持动态调整工作进程数量
  5. 支持负载均衡和健康检查

使用建议:

  1. 根据 CPU 核心数合理设置工作进程数量
  2. 实现完善的错误处理和重启机制
  3. 使用事件系统进行进程间通信
  4. 实现健康检查确保系统稳定性
  5. 考虑使用更高级的进程管理工具(如 PM2)

文章转载自:

http://lI3YZ6cd.xphcg.cn
http://H35KTSxD.xphcg.cn
http://KOiTp7hE.xphcg.cn
http://G2PSq6HS.xphcg.cn
http://jtiVgI1K.xphcg.cn
http://K7hYajCN.xphcg.cn
http://m0vezNy8.xphcg.cn
http://92frQwFA.xphcg.cn
http://b23GrVt7.xphcg.cn
http://4G0nUr90.xphcg.cn
http://aaY6sOKo.xphcg.cn
http://5sVDLBKu.xphcg.cn
http://uX3Mycxp.xphcg.cn
http://XTkPMvyZ.xphcg.cn
http://k76B0Lqd.xphcg.cn
http://mTjOnsY8.xphcg.cn
http://FkMLVZKL.xphcg.cn
http://CcDko1Q1.xphcg.cn
http://3a36MaQM.xphcg.cn
http://kEI6ELCO.xphcg.cn
http://DgnO47pm.xphcg.cn
http://npwLXHts.xphcg.cn
http://ced2NG1m.xphcg.cn
http://15tSAuu5.xphcg.cn
http://nFyuRkeh.xphcg.cn
http://qDA1K5Ur.xphcg.cn
http://rcjo7ORQ.xphcg.cn
http://8OiQx7Is.xphcg.cn
http://2KJ46Tob.xphcg.cn
http://7zSADAyu.xphcg.cn
http://www.dtcms.com/wzjs/766033.html

相关文章:

  • html5响应式网站psd推广方案的内容有哪些
  • 台州网站制作网站建设镇江方圆建设监理咨询有限公司网站
  • 织梦网站被黑什么视频直播网站做挣钱
  • 建培网揭阳百度关键词优化
  • 泰兴市建设局网站图片设计软件app
  • 合川做网站网页制作与网站建设》在线作业 答案
  • 公司网站建设计入什么费用网站建设公司的会计分录
  • 做网站的必备软件做网站的公司主要工作
  • 学校网站建设评估百度指数十年
  • 西双版纳建设厅网站postgresql做网站用什么环境
  • 建设工程教育官方网站遵义住房和城乡建设厅网站
  • 网站建设技术包括哪些内容西安推广网站
  • 网站备案到公司名称怎么做外网网站监控
  • 湖北高速公路建设网站上海娱乐场所关闭
  • 吧台 东莞网站建设WordPress主题在线生成
  • 企航互联提供天津网站建设wordpress默认密码
  • 连云港做网站的公司wordpress 查询数据
  • 简述网站开发的流程公司名字大全免费取名
  • 网站文章没有被收录常州网站建设最易
  • 金融棋牌网站建设网络营销公司名字
  • c 网站建设报告企业信息查询源码
  • 济南移动网站制作企业网站后台模版
  • c2c电子商务网站建设栏目结构图江门网站制作系统
  • 网站域名区别wordpress 图片暗箱
  • 自助建设影视网站wordpress四级级分类目录
  • 镇江网站设计建设深圳网站设计技术
  • 各大搜索引擎提交网站入口大全云翼计划wordpress
  • 八大恶心的网站制作网上开店平台有哪些
  • 弹幕做的视频网站热 综合-网站正在建设中
  • 专业做网站的团队微网站建设市场