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

湛江网站建设与网页千峰培训机构官网

湛江网站建设与网页,千峰培训机构官网,网站建设 阿里巴巴旗下,网站建设有哪些文件首先讲了进程和线程区别 然后讲解 管道和套接字#xff0c;它是进程间通信的方式 接着讲解共享变量 #xff0c;它是线程间通信 最后讲解TCP三次握手#xff0c;因为套接字使用了TCP协议 一、线程和进程的区别 线程#xff08;Thread#xff09;和进程#xff08;Pr…首先讲了进程和线程区别 然后讲解 管道和套接字它是进程间通信的方式 接着讲解共享变量 它是线程间通信 最后讲解TCP三次握手因为套接字使用了TCP协议 一、线程和进程的区别 线程Thread和进程Process是操作系统中并发执行的两个基本单位。它们都可以执行任务但作用范围和资源管理方式不同。 一张对比表快速理解 比较项进程Process线程Thread基本定义系统资源分配的最小单位CPU调度的最小单位属于进程是否独立相互独立拥有各自内存空间同一进程下线程共享内存空间资源占用占用资源较多独立地址空间占用资源少共享进程资源通信方式进程间通信IPC复杂如管道、socket线程间通信简单共享变量创建销毁代价创建和销毁开销大开销相对小崩溃影响一个进程崩溃不会影响其他进程一个线程崩溃可能影响整个进程举例Chrome每个标签页一个进程Chrome标签页中的多个脚本线程 举个例子说明 想象你开了一家餐厅 一个进程就像一个餐厅彼此独立。 一个线程就像餐厅里的服务员共享厨房、菜单、收银台。 你开的多个餐厅之间进程是互不影响的但一个餐厅中的多个服务员线程可以一起服务但他们共享资源配合更紧密。 编程角度理解 在 Java、Python、Node.js 中我们可以通过 thread, child_process, worker_threads 创建线程或进程。 Node.js 中示例 // 创建子进程 const { fork } require(child_process); fork(child.js);// 创建线程Node.js 10 const { Worker } require(worker_threads); new Worker(./worker.js);总结记忆口诀 “进程是房子线程是房间” 一个进程里可以有多个线程但线程不能脱离进程单独存在。 如果你在学 Node.js、Java 或 Python 并发模型我可以分别帮你分析线程/进程的用法和适用场景。需要我进一步展开哪门语言下的实践案例 二、进程间通信中管道是什么 在操作系统中管道Pipe是一种常见的进程间通信IPC, Inter-Process Communication机制允许一个进程把数据发送给另一个进程就像水流通过水管一样。 一句话解释 管道就是一个连接两个进程的通信通道一个进程写入数据另一个进程读取数据。 管道的原理 管道本质上是一个内核缓冲区FIFO 队列。 写端写入数据 → 内核缓冲 → 读端读取数据。 是半双工通信数据只能单向流动。 管道的类型 类型说明匿名管道父子进程间通信只能在具有亲缘关系的进程间使用命名管道 FIFO允许无亲缘关系的进程通信有名称文件路径位于文件系统中 举例Node.js 匿名管道spawn 使用标准输入输出 const { spawn } require(child_process);const child spawn(node, [-e, process.stdin.pipe(process.stdout)]);child.stdin.write(Hello from parent!\n); child.stdin.end(); child.stdout.on(data, data {console.log(Child says: ${data}); });命名管道Linux Bash 示例 # 创建命名管道 mkfifo mypipe# 一个终端向管道写入 echo Hello mypipe# 另一个终端从管道读取 cat mypipe特点和限制 ✅ 进程间数据共享快速。 ✅ 管道通信不需要借助中间文件。 ❌ 匿名管道只能用于父子进程。 ❌ 半双工通信除非建立两个管道。 ❌ 不能跨网络使用仅限本地进程。 ✅ 常见应用场景 Shell 中的命令管道ls | grep txt 父子进程间传递数据如 Node.js 中子进程通信 轻量级、无锁通信场景 总结口诀 匿名管道亲缘深命名管道通陌生写端数据流向读半双工最常见。 如果你想知道在 Java、C/C、Python 中怎么实现管道通信也可以举例说明。是否需要我给出跨语言的管道实现 三、进程间通信socket是什么 在操作系统中Socket套接字是最强大、最灵活的进程间通信IPC机制之一它不仅能实现本地通信还能支持网络通信跨主机。 一句话解释 Socket 就是一种通信端点用于两个进程之间发送和接收数据无论这两个进程是在同一台机器上还是在不同主机上。 ️ 工作原理 Socket 通信的基本模型是 客户端-服务器Client-Server模型 服务器进程监听某个地址IP 端口。 客户端进程主动连接这个地址。 双方建立连接后就可以双向通信全双工。 套接字类型按通信范围 类型范围示例说明本地套接字同一台机器上通信Unix Domain Socket文件路径网络套接字跨主机通信TCP/IP、UDP 套接字 Node.js 中的 Socket 通信示例 1. 本地通信UNIX Socket // server.js const net require(net); const server net.createServer((socket) {socket.on(data, (data) {console.log(Server received:, data.toString());}); }); server.listen(/tmp/mysocket); // 本地 socket 文件// client.js const net require(net); const client net.createConnection(/tmp/mysocket, () {client.write(Hello from client); });2. 网络通信TCP Socket // tcp-server.js const net require(net); const server net.createServer((socket) {console.log(Client connected);socket.on(data, (data) {console.log(Server received:, data.toString());socket.write(pong);}); }); server.listen(3000);// tcp-client.js const net require(net); const client net.createConnection(3000, localhost, () {client.write(ping); }); client.on(data, (data) {console.log(Client received:, data.toString()); });特点 特性描述 通用性强本地通信、远程通信都可用 全双工可以双向同时读写 文件描述符在类 UNIX 系统中 Socket 是一种特殊的文件描述符 可配加密可以集成 TLS/SSL 实现安全通信HTTPS、WSS 等 适合复杂通信比如多客户端并发、长连接、大数据传输等 与其他通信方式对比 通信方式是否跨主机是否双向应用难度性能常见用途管道 pipe❌ 本地 半双工简单高父子进程简单数据传输消息队列❌ 本地✅中中多进程异步通信Socket✅ 本地远程✅ 全双工✅ 复杂中-高服务端、网络通信共享内存❌ 本地✅复杂⚡ 极快高性能数据交换 Socket 常用场景 本地服务与客户端通信如数据库客户端 网络服务Web Server、Chat Server 微服务间通信配合 TCP/HTTP 实时推送WebSocket ✅ 总结口诀 Socket 是个洞进程互打通。可远程可本地网络通信最通用。 如果你想继续了解 UDP socket 和 TCP socket 区别 WebSocket 和原始 socket 的差异 socket.io 使用实例前后端实时通信 可以告诉我我可以一并讲清楚。 四、TCP三次握手 我们从原理到实战场景全面讲清楚 TCP 三次握手Three-way Handshake并且深入探讨你提到的重点问题“是否可以省略第三次握手” 一、什么是 TCP 三次握手 三次握手是建立 TCP 连接时客户端和服务器之间必须进行的 三步通信流程确保双方都具备发送和接收能力才能正式开始数据传输。 二、三次握手详解图 文 lua 复制编辑 客户端 服务端 | ------ SYN ------- | 第一次握手客户端发起请求 | ----- SYN-ACK -----| 第二次握手服务端确认并回应 | ------ ACK -------| 第三次握手客户端确认 ✅ 第一次握手客户端 → 服务端 客户端发送一个带 SYN 标志的数据包。 表示“我要连接你并且我能发送数据了。” 此时客户端进入 SYN_SENT 状态。 ✅ 第二次握手服务端 → 客户端 服务端收到 SYN 后确认客户端能发送。 回复一个带 SYNACK 标志的包。 表示“我知道你要来我也可以发送数据。” 服务端进入 SYN_RECEIVED 状态。 ✅ 第三次握手客户端 → 服务端 客户端收到 SYNACK 后再发一个 ACK。 表示“我知道你也准备好了我们开始吧” 此时双方进入 ESTABLISHED 状态连接建立成功。 三次握手的目的总结 目的举例✅ 确保客户端能发送第一次握手✅ 确保服务端能接收并能发送第二次握手✅ 确保客户端能接收第三次握手 ❓是否可以省略第三次握手 不能省略。 原因 如果省略服务端无法确认客户端“收到了”自己的 SYNACK。 网络不稳定或中间设备重发可能导致服务端误以为连接成功出现半连接SYN Flood 漏洞。 TCP 协议设计就是为了防止这种“单向认为建立连接”的问题。 示例场景省略第三次握手会怎么样 客户端发了 SYN服务端发了 SYNACK但客户端没有发 ACK 就宕机了。 如果不等待第三次握手 服务端误以为连接建立。 客户端其实已经没了。 服务端一直占用连接资源白白浪费资源泄漏。 补充SYN Flood 攻击 攻击者连续伪造 IP 发送 SYN 包但不发送第三次 ACK。 服务端进入 SYN_RECEIVED等待 ACK 却等不到连接被挂起。 持续攻击会让服务端连接数爆满无法为正常用户服务。 解决方案 使用 SYN Cookie 技术。 连接队列限制。 ✅ 总结口诀 三次握手不多余确认彼此都OK。缺一不可防欺骗少了连接不安全。 如果你还想进一步了解 四次挥手断开连接机制 TCP 状态转换图如 TIME_WAIT, CLOSE_WAIT 和 HTTP 的握手区别如 HTTP/1.1 vs HTTP/2 我可以继续为你展开。 五、子进程和主进程区别和API 在 Node.js 中子进程child process用于执行一个独立的任务或运行另一个程序与主进程并行执行、互不干扰。这是 Node 在单线程模型中实现多任务处理并发/并行的常用手段。 一、主进程 vs 子进程 的区别 对比项主进程子进程启动方式node 直接启动主进程通过 child_process 模块创建内存空间独立进程拥有自己的内存空间也是独立的和主进程不共享内存需显式通信执行上下文当前运行的 Node.js 文件和上下文可运行任意 Node.js 文件或外部命令是否共享事件循环❌ 不共享事件循环每个子进程有自己的事件循环通信方式-通过 IPC进程间通信或标准输入输出错误影响主进程出错影响全局子进程崩溃不影响主进程反之亦然 二、创建子进程的 4 个核心 APIchild_process 模块 你需要通过 const child_process require(child_process);进行调用。 1️⃣ exec(command[, options], callback) 用于执行一个命令行命令适合处理结果较小的任务。 会将子进程的输出stdout 和 stderr缓存在内存中传给回调函数。 const { exec } require(child_process);exec(ls -la, (err, stdout, stderr) {if (err) {console.error(错误, err);return;}console.log(标准输出, stdout); });2️⃣ execFile(file[, args][, options][, callback]) 直接执行一个可执行文件比如 .exe, .sh, .py不会通过 shell 解析。 安全性更高、性能更好适用于直接调用程序文件。 const { execFile } require(child_process);execFile(node, [--version], (err, stdout) {if (err) throw err;console.log(Node 版本是, stdout); });3️⃣ spawn(command[, args][, options]) 更底层适合**处理大数据流持续输出**的子进程。 返回一个 ChildProcess 对象你可以用 stdout.on(data) 来获取数据。 const { spawn } require(child_process);const child spawn(ping, [baidu.com]);child.stdout.on(data, (data) {console.log(输出${data}); });child.stderr.on(data, (data) {console.error(错误${data}); });child.on(close, (code) {console.log(子进程退出码${code}); });4️⃣ fork(modulePath[, args][, options]) ✅ 专为 Node.js 脚本间的多进程通信而设计默认通过 IPC 通信process.send() 和 message 事件。 // parent.js const { fork } require(child_process); const child fork(./child.js);child.send({ msg: Hello from parent! });child.on(message, (msg) {console.log(父进程接收:, msg); });// child.js process.on(message, (msg) {console.log(子进程接收:, msg);process.send({ reply: Got it! }); });✅ 三、适用场景对比总结 API适合场景是否支持通信是否缓冲输出exec简单命令 小输出结果❌✅内存缓存execFile运行本地程序、脚本❌✅spawn处理持续输出如视频转码❌❌流式处理forkNode 之间多进程通信✅❌ 四、如何终止子进程 使用 child.kill(); // 默认发送 SIGTERM 信号五、补充推荐阅读 官方文档https://nodejs.org/api/child_process.html Node.js进程模型分析文章 Node.js高级编程书籍中的“多进程架构” 需要我结合实战比如用子进程处理图片压缩、日志分析、CPU 密集计算等例子吗或者再带你写一个完整的 fork 通信项目也可以。
http://www.lakalapos1.cn/news/22689/

相关文章:

  • 英文网站开发wordpress 移动主题
  • 提高网站流量的软文案例衡阳网站建设专家
  • 中国建设银行邢台分行网站wordpress说明书
  • 域名注册好怎么建设网站建网站
  • 山东省机关建设网站258网站建设
  • 克隆视厅网站怎么做上海黄浦区网站建设
  • 网站建设和网站优化哪个重要删除wordpress缓存文件
  • 网站筹备建设情况精品网站建设费用 v磐石网络
  • 做字幕网站南京seo新浪
  • 网站编程语言有哪些视频网站程序模板
  • 本公司经营网站建设WordPress文章过滤
  • 东营市建设网站广州网站建设兼职
  • 济南网站定制策划外国网站域名
  • 网站模板对seo的影响吗wordpress加入自己的类库
  • 网站建设+泰安怎么制作一个团购小程序
  • 网站系统维护中网站建设 电话营销
  • 老榕树网站建设网页美工设计是什么
  • 苏州网站设计公司有哪些购物网站功能详细介绍
  • 新版 网站在建设中...网站建设电影
  • 做ppt用什么网站好淘宝联盟怎样做新增网站推广
  • 购买主机可以做网站吗沈阳搜索排名公司
  • 手机网站 需求模板做宣传手册的网站
  • wordpress做的网站图文制作app
  • 企业网站建设的总体目标腾讯云域名续费
  • 网站的简介怎么在后台炒做佛山建设银行网站
  • 做外贸的网站怎么建立广东全屋定制十大名牌
  • 关于网站建设的介绍想做机械加工和橡胶生意怎么做网站
  • 网站推广和网站优化网站建设推广公司
  • 长沙网站seo诊断个人网站制作图片
  • 为什么用MyEclipse做网站wordpress子主题缺点