【利用AI让知识体系化】解锁异步编程的新世界!

news2024/11/17 0:01:36

在这里插入图片描述

文章目录

  • I. 前言
    • 简介
    • 异步在计算机编程中的应用
  • II. 同步与异步
    • 定义与区别
    • 同步编程的缺点
  • III. 异步编程
    • 定义
    • 应用场景
    • 回调函数
    • Promise对象
    • async/await关键字
    • 事件循环
  • IV. 异步编程实例
    • Node.js中使用异步编程
    • 异步HTTP请求实现
    • 异步文件操作
  • V. 异步编程的优势
  • VI. 异步编程的挑战与解决方案
  • VII. 结论

I. 前言

简介

异步编程是计算机编程中的一种编程方式,不同于传统的同步编程,其可以使程序在等待某个操作完成时,可以继续执行其他操作,从而实现异步执行。

在传统的同步编程中,程序会按照代码的顺序执行,但是在执行某些操作时,如网络请求、文件读取或者数据库查询等等,这些操作需要等待应答或者读取完成,此时程序会被阻塞,只能处于等待状态,直到该操作完成后才能继续执行下面的语句。

在这种情况下,如果操作耗时长,就会导致程序响应缓慢,甚至崩溃。而异步编程则可以通过回调函数、Promise对象、async和await等技术解决这些问题,使得程序在等待某些操作完成时可以执行其他操作,从而更加高效、灵活、可扩展。

异步在计算机编程中的应用

异步编程在计算机编程中有广泛的应用,以下是一些常见的例子:

  1. 网络请求:在进行网络请求时,如果使用同步方式会造成程序阻塞。但使用异步方式可以发送请求后继续执行下面的代码,等待服务器响应的过程中不用浪费时间等待。

  2. 文件读写:文件IO如果使用同步方式也会阻塞程序,而使用异步则可以使程序在等待文件读写完成时执行其他操作。

  3. 数据库查询:数据库查询可能在网络上进行,需要一定的处理时间,如果使用同步方式,则必须等待查询返回的响应。但使用异步方式可以在等待响应时执行其他任务。

  4. GUI应用程序:通过异步编程可以防止单个事件的处理时间过长导致界面卡顿,从而提高应用程序的响应速度和用户体验。

  5. 游戏开发:游戏开发需要大量的计算和输入输出操作,使用异步方式可以避免卡顿和延迟等问题,从而使得游戏更加流畅。

总之,异步编程在计算机编程中具有重要的应用价值,能够在做出计算任务的同时,避免造成程序阻塞、提高程序效率和响应速度,从而提高应用程序的用户体验。

II. 同步与异步

定义与区别

同步和异步是计算机编程中的两种不同的执行模式或方式。

同步(Synchronous)指的是在执行操作时需要等待前一个操作执行完成后才能开始后续的操作。同步方式的代码执行由程序控制,一次只执行一个任务,每个任务都必须在上一个任务完成后才能被执行。在同步方式下,当某一操作需要花费很多时间的时候,程序的执行就会停滞并等待这个操作完成。这种方式通常用于解决一些简单的任务,例如数据处理和图形化用户界面的操作,但是会导致程序出现阻塞现象,对于时间开销较大的操作,会严重影响整个程序的性能。

异步(Asynchronous)指的是不需要等待上一个操作完成就可以执行后续操作。异步方式的代码执行不由程序控制,因为通常是由事件驱动的,每个任务的执行不会卡住前面的操作,也就是说在等待数据时不会阻碍其他代码的执行。程序只需要在调用某个异步操作时注册回调函数,在该操作完成时自动执行回调函数。这种方式通常用于解决一些具有后台处理的任务,例如网络请求、文件读取和GUI应用程序等,可以提高程序的效率和响应速度。

总结:同步和异步的主要区别在于程序在等待操作完成时是否可以执行其他操作。同步操作会阻塞程序,导致程序的执行顺序固定,而异步操作不会阻塞程序,可以同时执行其他操作,提高程序的效率和响应速度。

同步编程的缺点

同步编程的主要缺点是程序在等待某些操作完成时会被阻塞,直到该操作完成为止,这会导致程序出现低效甚至卡顿的情况。

具体来说,同步编程的缺点包括:

  1. 阻塞主线程:在同步编程中,当某个操作需要花费很多时间时,整个程序就会被阻塞,等待该操作完成,这会导致主线程无法被释放,无法执行其他任务。

  2. 代码结构复杂:在同步编程中,为了保证代码能够按照顺序正确执行,需要对多个操作进行嵌套调用,这会导致代码结构变得复杂,难以阅读和维护。

  3. 程序性能低:在同步编程中,由于程序需要等待操作完成才能继续执行,因此程序的性能会受到影响。如果等待时间太长,程序可能会出现卡顿和崩溃等问题。

  4. 不易于扩展:在同步编程中,添加新的任务会导致程序的执行顺序发生变化,这会影响整个程序的正确性。同时,同步编程往往需要完整地编写一整段代码,以至于不易于对代码进行分段处理。

综上所述,同步编程虽然易于理解和实现,但是它的缺点也使得它难以适应大规模、高并发的现代应用场景,异步编程因此应运而生。

III. 异步编程

定义

在计算机编程领域中,异步编程是指在执行代码时不需要等待某个操作的结果,而是在操作完成之后再对其进行响应,从而实现异步操作和多任务并发执行。与同步编程不同,异步编程可以在进行耗时操作时不会阻塞主线程,而是通过回调函数、Promise对象、async和await等技术,在操作完成时尽快触发相关的响应。

异步编程被广泛应用于涉及网络IO、磁盘IO和大量计算的场景中,例如Web应用程序、游戏开发、数据挖掘、机器学习等。通过异步编程,程序可以在等待某些操作完成时执行其他的任务,从而提高了程序的性能和效率,使代码更具灵活性、可扩展性和可维护性。

总之,异步编程是一种高效、灵活、可扩展的编程方式,可以在应对大量、复杂的I/O操作和计算密集型任务时带来很大的好处。

应用场景

异步编程在现代计算机编程中有许多广泛的应用场景。以下是一些常见的应用场景:

  1. 网络编程:在客户端和服务器端的网络编程中,通过异步编程可以实现多用户并发请求和处理,在处理网络请求和响应时不需要阻塞主线程,提高了程序的响应速度和效率。

  2. 文件处理:对于大文件的读取和写入操作,异步编程可以使程序在等待IO操作完成的同时执行其他操作,避免程序阻塞,提高程序效率。

  3. GUI应用程序:通过异步编程可以防止GUI应用程序在进行计算密集型或网络请求操作时出现卡顿和无响应情况,从而提高应用程序的用户体验。

  4. 数据库查询:数据库查询可能涉及到对多张表的关联查询和大量数据的处理,使用异步编程可以在等待查询结果时执行其他任务,避免程序阻塞和出现无响应情况。

  5. 游戏开发:在游戏开发中,通过异步编程可以处理大量的游戏数据、游戏逻辑计算和网络数据通信操作,提高游戏的效率和响应速度。

  6. 数据挖掘和机器学习:数据挖掘和机器学习需要处理大量的数据和计算任务,异步编程可以帮助程序在处理这些任务时不会因为等待IO操作而陷入阻塞状态,从而提高计算效率。

总体而言,异步编程在计算机编程的许多领域中都具有非常广泛的应用和重要作用,可以提高程序的效率、响应速度和用户体验。

回调函数

在异步编程中,回调函数是一种常见的实现方式。

回调函数指向的是一个被异步操作调用的函数,当异步操作完成时,会调用该函数通知相关的代码处理结果。

回调函数经常用于处理异步请求的响应,如网络通信、文件读取和数据库查询等操作。例如,当执行一个异步网络请求时,通常需要注册一个回调函数来处理请求结果,当请求完成后,回调函数会被调用,处理请求的响应结果。

回调函数通常是作为函数参数进行传递的,它可以是匿名函数或具名函数,也可以包含任意数量的参数。一旦异步操作完成,回调函数就会被调用,返回有关异步操作结果的信息。

尽管回调函数是异步编程中的常见模式,但它有一些缺点。回调函数嵌套层次过多容易出现回调地狱的情况,代码可读性差,调试和维护都比较困难。因此,现代的异步编程技术通常使用Promise和async/await等方式来替代回调函数,以提高代码的可读性和可维护性。

Promise对象

Promise是一种将回调函数与异步操作进行解耦的一种技术,它可以让异步操作衔接起来,减少回调函数的嵌套层数,提高异步代码的可读性和可维护性。

在JavaScript中,Promise对象表示一个异步操作的最终状态(即已完成或已失败),并且可以将回调函数绑定到这些状态。它有三种状态:pending(进行中)、resolved(已完成)和rejected(已失败)。当异步任务完成后,Promise对象会通过调用resolve函数来标记为已完成状态,并返回异步操作处理的结果;如果异步任务出错,则通过调用reject函数来标记Promise为已拒绝状态,返回错误信息。

Promise对象有两个重要的方法,分别是then()和catch()。其中,then()方法在Promise对象成功完成时调用回调函数,catch()方法则在Promise对象出现错误时调用回调函数。使用then()和catch()方法可以优雅地处理异步操作的成功和失败情况,而不需要过多的嵌套回调函数。

示例代码如下:

function asyncFunction() {
  return new Promise(function(resolve, reject) {
    // 异步任务代码
    if (/* 异步任务成功完成 */) {
      resolve(result); // 成功情况
    } else {
      reject(error); // 失败情况
    }
  });
}

asyncFunction()
  .then(function(result) {
    console.log(result); // 异步操作成功的结果
  })
  .catch(function(error) {
    console.log(error); // 异步操作失败的原因
  });

总之,Promise是一种优雅和可维护的异步编程技术,可以大大改进异步回调函数的使用方式。

async/await关键字

async/await是ES2017中引入的一种异步编程技术,它是一种更简洁、更可读、更易于维护的编程方式,可以让异步代码看起来像同步代码。

async关键字用于定义一个异步函数,而await关键字用于挂起异步函数的执行,等待Promise对象返回结果,从而避免回调函数的嵌套。当使用await关键字等待Promise对象时,异步函数的执行会被挂起,直到Promise对象返回结果才会继续执行下面的代码。在挂起执行期间,JavaScript引擎会继续执行其他代码,使程序更具有高效性。

示例代码如下:

async function fetchData() {
  try {
    const response = await fetch('/api/data');
    const data = await response.json();
    return data;
  } catch (error) {
    console.log(error);
  }
}

fetchData()
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.log(error);
  });

在上述示例代码中,fetchData()函数使用async关键字进行定义,并通过await关键字等待异步操作的结果。当成功获取到数据时,返回Promise对象的状态变为已完成,从而触发then()回调函数;如果发生错误,则返回Promise对象的状态变为已拒绝,从而触发catch()回调函数。

简而言之,async/await技术通过使异步代码的执行方式更像同步代码,简化了异步编程的操作并提高了可读性和可维护性,这使得它成为现代编程实践中的一个重要的技术之一。

事件循环

事件循环是一种编程模型,常见于前端编程和异步IO。事件循环的核心思想是:程序在执行过程中,让一段代码处于等待状态(异步),等待某个事件的发生,然后将该事件加入到事件队列中,等待事件循环检测这个事件并执行相应的回调函数。

事件循环在编程中非常常见,比如浏览器的Event Loop,Node.js的Event Loop等等。

在前端开发中,事件循环可以用来处理页面上的异步请求和用户交互事件,比如点击事件、键盘事件等。在后端编程中,事件循环可以用来处理网络IO等异步操作。

总的来说,事件循环可以提高程序的并发性能,减少程序阻塞等待的时间,提升程序的运行效率。

IV. 异步编程实例

Node.js中使用异步编程

在 Node.js 中,核心模块大多数都是异步 IO 的形式,比如文件读写、网络请求等等。这是因为 Node.js 是基于事件驱动的,它的事件循环机制可以让程序在等待某个 IO 完成的同时,去处理其他的事情,提高了程序的效率和性能。

为了利用 Node.js 的异步特性,开发者可以采用以下常见的异步编程方式:

  1. 回调函数:Node.js 最基本和最常见的异步编程方式就是回调函数。将回调函数传入异步函数中,当异步操作完成时调用这个回调函数。

  2. Promise:Promise 是对回调函数的一种封装。Promise 用来处理异步操作的结果,可以让代码看起来更加清晰和简洁。

  3. async/await:async/await 是 ES2017 引入的语法,可以让异步编程更加简单和易读。async/await 让异步操作看起来像同步操作,代码的可读性更高。

总的来说,Node.js 的异步编程方式有多种选择,开发者可以根据需要选择适合自己的方式,提高程序的效率和可维护性。

异步HTTP请求实现

在 Node.js 中,可以使用内置的 http/https 模块来实现异步 HTTP 请求。以下是一个简单示例:

const https = require('https');

const options = {
  hostname: 'www.example.com',
  port: 443,
  path: '/api/something',
  method: 'GET'
};

const req = https.request(options, (res) => {
  console.log(`statusCode: ${res.statusCode}`);

  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('error', (error) => {
  console.error(error);
});

req.end();

在这个示例中,https.request 函数可以发起一个 HTTP/HTTPS 请求,并返回一个 ClientRequest 对象。可以通过事件监听的方式来获取请求的结果,比如调用 res.on(‘data’, …) 函数来监听数据的返回。

当请求发生错误时,可以通过在 req 对象上监听 error 事件来处理错误。

需要注意的是,如果是在 Node.js 中发送大规模请求,可以考虑使用 Node.js 中的第三方模块例如 axios 和 request,他们支持同时发出多个请求,支持请求的并发数量控制,能真正发挥出异步请求的并发优势。

异步文件操作

在 Node.js 中,可以使用 fs 模块进行文件的异步操作。以下是一个基本的异步读取文件的示例:

const fs = require('fs');

fs.readFile('/path/to/file', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }

  console.log(data.toString());
});

这个代码片段中,通过 readFile 函数读取文件,并在文件读取完成后返回数据,在回调函数中再进行操作。

如果需要异步写入文件,可以使用 writeFile 函数:

const fs = require('fs');

const content = 'hello world';

fs.writeFile('/path/to/file', content, (err) => {
  if (err) {
    console.error(err);
    return;
  }
  
  console.log('write file success');
});

除了 readFile 和 writeFile 函数外,fs 模块还提供了很多其他的异步操作,如异步创建目录(mkdir)、异步读取目录(readdir)等等。

V. 异步编程的优势

异步编程的主要优势如下:

  1. 提高程序性能:异步编程的最大优势就是可以提高程序的性能。在传统的同步编程中,如果有一些操作需要等待结果才能继续执行,会导致其他操作必须一直等待,无法并发执行。而在异步编程中,程序可以在等待某个异步操作完成时,继续执行其他任务,从而极大地提高了程序的运行效率和吞吐量。

  2. 减少资源浪费:异步编程可以同时处理多个异步操作,减少了资源浪费。因为同步操作会让程序一直等待,浪费 CPU 时间和系统资源。而异步操作在等待结果的同时,可以让程序继续执行其他操作,降低了资源的浪费。

  3. 提高代码可读性:异步编程通常采用回调、Promise、async/await 等方式,可以让代码看起来更加简洁和易读。尤其是在处理复杂逻辑和多个异步操作的时候,相比于同步编程,异步编程能够更好地组织代码和控制程序的流程,提高了代码的可读性和可维护性。

总的来说,异步编程是现代编程中不可或缺的重要特性,可以让程序更加高效、资源利用率更高、代码更简洁易懂。

其他:提高用户体验/可以避免阻塞主线程

VI. 异步编程的挑战与解决方案

异步编程的同时也带来了一些挑战,比如:

  1. 回调地狱:如果使用回调方式进行异步编程,可能会引发回调地狱问题。即嵌套过多的回调函数会极大的降低代码的可读性和可维护性,使代码变得混乱和难以维护。

解决方案:使用 Promise 或 async/await 可以有效地解决回调地狱问题,将异步编程代码的可读性和可维护性提高到一个新的层次,也更符合现代编程的标准。

  1. 异常处理:在异步编程中,由于异步操作是异步执行的,很难捕获异步操作的异常。如果没有合适的异常处理方式,很容易出现异常错误,导致程序崩溃或数据丢失。

解决方案:对于回调形式的异步编程,可以在回调函数中使用 try-catch 方式来捕获异常。对于 Promise 和 async/await,可以使用 catch 方法来捕获异常。同时,可以采用日志输出和报警等方式,及时发现和解决异常问题。

  1. 并发控制:异步编程常常会涉及到并发控制,如果并发操作过多,会导致系统资源紧张,程序运行效率下降,从而影响程序的性能。

解决方案:可以使用一些工具来控制并发数量,比如 async.js、bluebird、axios 等,这些工具具有处理异步请求并发控制的能力。

  1. 难以调试:在异步编程中,当出现问题时,很难定位问题发生的位置和原因,给调试带来困难。

解决方案:可以使用 Node.js 的调试工具,比如 Node.js inspector,使用日志输出等方式,及时捕获并输出程序错误的详细信息,从而提高问题排除的效率。同时也可以使用一些专门针对异步编程的调试工具,比如 Node-Async-Debugger 等。

VII. 结论

异步编程的未来是光明的。随着现代应用程序的不断增长和复杂性的增加,异步编程已经成为必要的编程方式。未来异步编程将更加普遍,因为它可以显著提高应用程序的性能,减少资源浪费,提高代码的可读性和可维护性。

因此,未来的异步编程将面临以下挑战:

  1. 更流行的异步编程方式:随着技术的发展和发展,异步编程将采用更多更流行的编程方式,例如 Reactive Programming 和 Event Sourcing,以提高应用程序的可扩展性和性能。

  2. 更好的错误处理和调试:开发者将越来越需要更好的错误处理方式,包括更好的错误堆栈、应用程序的性能监控和更好的调试机制。

  3. 更好的并发处理:随着应用程序的性能不断提高,开发者需要更好的并发控制机制,以确保应用程序能够有效地处理并发请求和高负载。

总的来说,异步编程是应用程序性能和可维护性的一个重要组成部分,它将继续发展和壮大,以确保应用程序在未来的发展中更加稳定和高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/546939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker 运行 jenkins

概述 虚拟机启动Docker,运行Jenkins,进行代码拉取测试 实现功能: 1. 可链接外网 2. 可拉取仓库代码 3. 基本配置 部署 拉取镜像 docker search jenkins docker pull jenkins/jenkins 创建工作目录 # 创建目录 给工作挂载目录赋予权限 mk…

KingbaseES V8R6 数据库运维案例之 -- root用户securecmd连接'Permission denied'错误

案例分析: 在KingbaseES V8R6数据库在不支持ssh连接的系统环境,可以通过securecmdd服务建立主机之间的通讯,默认securecmdd服务建立用户之间的互信,通过publickey认证建立访问连接。在配置securecmdd服务后,默认kingba…

JavaScript实现计算1-100之间不能被7整除的数的和的代码

以下为实现计算1-100之间不能被7整除的数的和的程序代码和运行截图 目录 前言 一、实现计算1-100之间不能被7整除的数的和 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择,您可以在目录里进行快速查找; 2.…

【JavaWeb】--06.Filter、Listener、Ajax、Vue

文章目录 Filter1.概述2.快速入门2.1 开发步骤2.2 代码演示 3.Filter执行流程4. Filter拦截路径配置5.过滤器链5.1 概述5.2 代码演示5.3 问题 Listener1.概述2. 分类3.代码演示 Ajax1.概述1.1作用1.2 同步和异步 2.快速入门2.1 服务端实现2.2 客户端实现2.3 测试 3.axios3.1 基…

MVC 三层架构案例详细讲解

MVC 三层架构案例详细讲解 文章目录 MVC 三层架构案例详细讲解每博一文案1. MVC 概述2. MVC设计思想3. 三层架构4. MVC 与 三层架构的关系:5. 案例举例:用户账户转账5.1 M(Model :数据/业务处理层)5.2 C (Controller :…

软件测试实验:Web应用测试

目录 前言Web应用的特点实验目的实验内容实验要求实验过程系统测试用例系统测试执行记录系统测试缺陷报告 总结 前言 软件质量保证与测试技术实验是一门旨在培养学生掌握软件测试的基本理论和方法的课程。本实验主要涉及Web应用测试,包括以下几个方面:一…

Scala初学者指南

本文已收录至Github,推荐阅读 👉 Java随想录 文章目录 Scala跟Java的区别和联系Scala安装Scala中的数据类型Scala语法val和var泛型包导入包对象特质运算符传名参数implicitObject和Class样例类_(下划线)println集合ListMapRange 迭代器Tuple提取器对象流…

代码随想录 哈希表 Java

文章目录 (简单)242.有效的字母异位词(简单)383. 赎金信(中等)49. 字母异位词分组(*中等)438. 找到字符串中所有字母异位词(简单)349. 两个数组的交集&#x…

CyberLink的专业视频编辑软件ActionDirector Ultra 3.0版本在win10系统的下载与安装配置教程

目录 前言一、ActionDirector Ultra安装二、使用配置总结 前言 ActionDirector Ultra是CyberLink公司开发的专业视频编辑软件,旨在帮助用户创作高质量的运动和冒险视频。该工具提供了一些先进的特效和编辑工具,让用户能够轻松地剪辑、修剪、调整颜色和添…

队列实现栈(你看我讲的是不是最细的就完了)

最伟大的成就往往起源于最强烈的热情。 -- 诺曼文森特皮尔目录 🗼一.队列实现栈 🍅二.使用两个队列来模拟实现栈 🍋1.栈结构体包含两个队列 🍒2.创建一个结构体的指针 🍂3.myStackPush入栈操…

【小沐学Python】Python实现Web图表功能(ECharts.js,Flask)

🎈🎈🎈Python实现Web图表功能系列:🎈🎈🎈1🎈【Web开发】Python实现Web图表功能(D-Tale入门)🎈2🎈【Web开发】Python实现Web图表功能&a…

编程不头秃,Google「AI程序员」来了,聊天就能敲代码

上周 Google 在 I/O 大会宣布了一个能够辅助编程的聊天机器人 Codey,现在它终于上线 Google Colab 啦! 🌟 Codey 是基于 Google 目前最新的大语言模型 PaLM 2 运行,有着强大的语言理解和编程能力。 Codey 有这些功能&#xff1…

【k8s】【ELK】【三】Sidecar容器运行日志Agent

1、日志收集场景分析与说明 对于那些能够将日志输出到本地文件的Pod,我们可以使用Sidecar模式方式运行一个日志采集Agent,对其进行单独收集日志1、首先需要将Pod中的业务容器日志输出至本地文件,而后运行一个Filebeat边车容器,采…

chatgpt赋能Python-python3_绝对值

Python3中的绝对值 在本文中,我们将深入了解Python3中的绝对值(Absolute Value)以及如何在Python3中使用它。 我将介绍Python3的abs函数,它是一个内置函数,用于计算数字的绝对值。 什么是绝对值? 在数学…

详解MySQL主从复制

目录 1.概述 2.配置使用 2.1.master配置 2.2.slave配置 2.3.认主 2.4.确认认主结果 3.请求分发 3.1.概述 3.2.手动分发 3.2.1.原生JDBC 3.2.2.数据源 3.2.3.中间件 1.概述 在实际的数据密集型应用中,数据库层面往往呈现两个特点: 单点数据…

VONR排查指导分享

不能注册或呼叫到SIP服务器端30秒挂断呼叫的黄金法则咬线或摘机状态单通或无语音收到400 bad request收到413,513 Request Entity Too Large或Message Too Large消息收到408, 480或者487 消息483 - Too Many Hops488 – Not Acceptable Here语音质量和思…

chatgpt赋能Python-python3_9怎么安装

Python 3.9:安装指南 如果你正在学习编程或者已经是一名程序员,那么一定会了解到Python这个编程语言。Python是一种高级编程语言,其强大的设计特点和易于操作的特性使其成为了开发人员的首选。Python 3.9已经发布了,它虽然不是Py…

CSDN官方创作助手InsCode AI 教你分分钟搞定一篇好文章

CSDN官方推出创作助手InsCode AI很多天了,有心人都能发现,在写作界面的右上角多了一个创作助手的浮动按钮,点击后出现如下界面: 现阶段是“限免”状态,不好好利用它来创作,就有点辜负CSDN官方大佬们的良苦用…

【王道·计算机网络】第五章 传输层【未完】

一、传输层概述 传输层为应用层提供通信服务,使用网络层服务传输层的功能: 提供进程和进程之间的逻辑通信(网络层提供主机之间的逻辑通信)复用(发送发不同的应用进程)和分用(接收方正确的数据传…

Primer C++(第三章)

补码、原码和反码 正数的原码、反码、补码都相同 负数的补码:1、正数的原码符号位由0变1 (负数的原码) 2、对负数的原码除符号位外每位取反 (负数的反码) 3、对负数的反码末尾1 (负数的补码) …