Socket 的两个不同含义:硬件 CPU Socket 和 网络 Socket 的区别

第1、2章 Linux内核概述和网络包传输的关键数据结构——Socket Buffer 内核组件: 阅读详情

Socket 的两个不同含义:硬件 CPU Socket vs 网络 Socket

Socket 在计算机领域有两个完全不同的含义,容易混淆但本质不同:


1. 硬件 CPU Socket(CPU 插槽)

定义

  • 指物理 CPU 插槽,主板上安装 CPU 的接口(如 Intel LGA1700、AMD AM5)。
  • 每个 Socket 可以包含一个或多个 CPU 核心(如 16 核的 Intel Xeon)。
  • NUMA 架构下,每个 Socket 有自己专属的本地内存(Local Memory)。

关键特性

  • 跨 Socket 访问内存:访问其他 Socket 的内存(Remote Memory)比本地慢。
  • 优化方法:CPU 绑定、NUMA 感知内存分配(如 numactl)。
  • 影响场景:高性能计算、数据库、虚拟化等延迟敏感型应用。

示例

# 查看系统 NUMA 拓扑(Socket 数量)
numactl --hardware

输出:

available: 2 nodes (0-1)  # 2 个 Socket(NUMA 节点)
node 0 cpus: 0-15        # Socket 0 的 CPU 核心
node 1 cpus: 16-31       # Socket 1 的 CPU 核心

2. 网络 Socket(套接字)

定义

  • 网络通信的编程接口,由操作系统提供(如 socket()、bind()、listen())。
  • 基于 TCP/IP 协议栈,用于进程间通信(如客户端-服务器模型)。
  • 经典的 BSD Socket API 是跨平台标准(Linux/Windows/macOS 通用)。

关键特性

  • 通信端点:通过 IP + 端口标识(如 192.168.1.1:80)。
  • 工作模式:
    • 流式 Socket(SOCK_STREAM):TCP,可靠传输。
    • 数据报 Socket(SOCK_DGRAM):UDP,无连接。
  • 优化方法:非阻塞 I/O、多路复用(epoll)、零拷贝等。

示例

// 创建一个 TCP Socket
int sockfd = socket(AF_INET, SOCK_STREAM, 0);

两者的核心区别

特性CPU Socket(硬件)Network Socket(软件)
本质物理 CPU 插槽操作系统提供的通信接口
作用域计算机硬件架构网络通信(进程间/跨主机)
优化目标减少跨 Socket 内存访问延迟提高网络吞吐量、降低延迟
相关技术NUMA、CPU 亲和性TCP/IP、epoll、Zero-Copy
工具/APInumactl、sched_setaffinitysocket()、send()、recv()

为什么容易混淆?

  1. 术语重叠:英文均为 “Socket”,但中文无明确区分。
  2. 上下文依赖:
    • 讨论 性能优化 时(如 NUMA),通常指 CPU Socket。
    • 讨论 网络编程 时(如 RPC/HTTP),通常指 Network Socket。

如何避免混淆?

  • 看上下文:
    • 若提到 NUMA、多核、内存访问 → CPU Socket。
    • 若提到 TCP/UDP、端口、网络通信 → Network Socket。
  • 看代码/命令:
    • numactl --hardware → CPU Socket。
    • socket(AF_INET, SOCK_STREAM, 0) → Network Socket。

总结

  • CPU Socket 是硬件概念,影响内存访问性能,需 NUMA 优化。
  • Network Socket 是软件接口,用于网络通信,需关注 I/O 模型。
  • 两者无关,但高性能程序中可能需要同时优化(如绑定网络线程到特定 CPU Socket)。
【Go语言实战】(26) 分布式搜索引擎 基于go语言的分布式搜索引擎 阅读详情

相关推荐

程序员实战:DINOv3 权重文件下载与本地化部署全流程指南

Meta开源的DINOv3视觉大模型凭借70亿参数和17亿图像训练,在语义分割、目标检测等任务表现优异。本文详解预训练权重的获取渠道、校验方法和加载实践。开发者可通过HuggingFace或GitHub获取不同版本权重,包括针对服务器端的ViT系列和边缘设备的ConvNeXt系列。文章提供MD5校验代码确保文件完整性,并给出PyTorch和Transformers两种加载方式。特别强调7B模型需16GB GPU内存,建议根据硬件条件选择合适版本,如边缘设备使用ConvNeXt-Tiny。最后指出DINOv3

xiugou3365的博客 5906

cpu core thread socket

CPU 插槽(socket),也称为 CPU 插槽(slot),是计算机硬件中的一个组件,在微处理器和印刷电路板 (PCB) 之间提供机械和电气连接。它允许您放置和更换中央处理器,而无需焊接。此功能可以方便地升级或更换计算机系统中的 CPU。

o_alpha的博客 1243

【Jlink & C#】通过C#实现Jlink RTT上位机的功能

某天看到安富莱家的自己开发的调试器可以实现输出中文调试信息到自己编写的Jlink RTT上位机上,觉得无比神奇,略好奇到底是如何做的,找了很久,发现其上位机的对应的实现好像也没有完全开源出来。后来经过很多搜索确认,知道了几个事实:那么有没有可能用C#来控制Jlink呢?答案是,有!!! 解决思路在于,C#调用JLinkARM.dll里面的函数 这里转载下我认为很有意义的发现结合以上的几个发现,加上我自己的测试,我把我对接JLinkARM.dll的C#接口分享出来,不保证都能用,我只是测试了几个常用的功能,R

一只爱做笔记的码农 9150

cpu,socket,core,thread

相关概念介绍:cpu/socket/core/thread

IForFree 584

stm32h743的hrtim使用生成pwm波

HRTIM(High-Resolution Timer)是一种高精度定时器,其时钟频率可直接与CPU主频同步,达到480MHz。相比之下,其他传统定时器需挂载在APB总线上,受总线频率限制,最高仅支持240MHz。这种直接时钟同步机制显著提升了定时器的分辨率和精度。

d13211322的博客 1612

ArcGIS拓扑面错误批量修改

在工作学习中经常会遇到拓扑修改的问题,当数据量巨大的时候会产生拓扑问题 当拓扑错误数量巨大时,人工逐一修改是不现实的,基于此利用gis自带工具箱实现拓扑面类错误的批量修改。 一、.常见拓扑错误的类型: 1面重叠 2空隙(绿色部分) 二、拓扑检查 1新建数据库-----新建数据集—导入数据. 2新建拓扑 3修改拓扑容差及名称 添加拓扑修改规则 完成拓扑检查-查看拓扑错误 三、拓扑批量...

qq_43173805的博客 3万+

CPU Socket的三种类型

CPU Socket作为连接处理器和主板的桥梁,看似简单,实际上承载着复杂的电气和机械设计考量。今天我们来聊聊目前市面上主流的三种CPU Socket类型。

ilearn的博客 1266

OSMDroid 切换地图不更新的问题

用OSMDroid加载Google地图的时候 需要有按钮切换不同图层的地图,如果发现调用了mMapView.setTileSource(ITileSource aTileSource)方法的时候发现地图View没有更新的话,可能是因为两个实例化TileSource对象其子类BitmapTileSourceBase这个类的aName成员变量值一样导致的地图在setTileSource出现不更新问题,...

godoge的博客 1039

cpu、socket、core、thread 等术语之间的关系

当我们在看技术文档时,经常会发现很多有关 cpu 的术语,比如 cpu、cpu socket、cpu core、hyper-threading 等,乱乱的分不清楚,这篇文章我带大家用三分钟时间,快速的过一遍各种术语代表什么,以及它们之间的关系。上图中 thread 总数是用 cpu 来表示的,这也是为什么上文说,cpu 是个比较宽泛的概念,在不同的语境下有不同的定义,这里表示的就是逻辑核,也就是 thread。core 的中文意思是核心,它就是我们平时说的,一个 cpu 中有几核的核的概念。

布袋和尚 5472

现代软件开发技术 | 第1章:Spring基础

Spring是一个轻量级Java 开发框架,最早由Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。

知识库搭建ing 455

PCL 直通滤波器【2026最新版】

PCL直通滤波器函数详解以及用于多字段滤波、强度滤波、获取某一时间范围内的点等高阶用法案例分享。博客长期更新,本文最近一次更新时间为:2026年3月11日。

点云侠的博客 40万+

Physical CPU、Logical CPU、Core、Thread、Socket

概念区分

Jia ming 的日常学习笔记 2168

资源分享·病毒样本下载资源分享

一、微步云沙箱 微步在线云沙箱https://s.threatbook.cn/ 使用病毒sha256即可寻找病毒样本;该站点也可上传可疑文件/可疑URL地址到沙箱中,进行分析 。 以永恒之蓝为例,样本sha256是:ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa 下载样本或流量监控,需要消耗积分: 二、AnyRun Interactive Online Malware Analysis Sandbox.

不忘初心,护天下安全! 2万+

说说TCP,UDP和socket,Http之间联系和区别

整理的这些区别和联系都是非常重要的。TCP协议 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。在因特网协议族(Internet protocol suite)

从头再来 3万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

网络编程Socket、Netty

网络编程基础 OSI七层模型 应用层:http协议、文件服务器、邮件服务器 表示层:数据转换,解决不同系统的兼容问题 会话层:建立与应用程序的会话连接 传输层:提供端口号和传输协议(TCP、UDP) 以下三层多体现在硬件层面上 网络层:为我们的数据实现路由(路由器、交换机) 数据链路层:传输的地址的帧及错误的检测 物理层:以二进制形式,在物理机上实现数据传输(光纤、专线、各种物理介质实现) 网络编程 Socket Socket技术 任何编程语言都支持socket(网络编程的技术)技术开发,目的就是解决两个应

puhome1986的博客 2587

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

物理 CPU vs 逻辑 CPU vs 核心 vs 线程 vs Socket

阅读本文大概需要 5 分钟。来源:http://uee.me/aXGxP☞ 开学季买书大优惠,错过等一年 ☜当我们试着通过 Linux 命令nproc和lscpu...

492

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Socket编程概念

一:什么是SOCKET socket的英文原义是“孔”或“插座”。作为进程通信机制,取后一种意思。通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄(其实就是两个程序通信用的)。 socket非常类似于电话插座。以一个电话网为例:电话的通话双方相当于相互通信的2个程序,电话号码就是ip地址。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求。对方假如在场并空闲,拿起电话话筒,双

gqk01的博客 1万+

Socket网络编程C++

整理自这些网页: https://blog.youkuaiyun.com/JHC23/article/details/98055883 https://blog.youkuaiyun.com/qq_38291480/article/details/107458246 https://www.cxyzjd.com/article/freee12/114411950 https://cizixs.com/2015/03/29/basic-socket-programming/ https://www.codenong.com/cs10

landscape 南北——的博客 1031

Network——Socket网络通信机制以及实现举例(TCP、UDP等)

1. 网络通信与Socket前言 TCP/IP协议族中网络层的IP地址可以唯一标识网络中的主机,而传输层的端口可以唯一标识主机中的应用程序。Socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的......

关于Android开发的一些技术点总结 ╮( ̄▽ ̄”)╭ 1万+

网络基础(协议,地址,OSI模型、Socket编程......)

所谓“局域网”(LAN)和“广域网”(WAN)只是一个相对的概念. 比如, 我们有 "天朝特色" 的广域网, 也可以看做一个比较大的局域网。

2302_80105876的博客 1580

Socket_网络编程

Socket_套接字:   在计算机领域,socket有多个意思。在硬件上,理解为插座上没错的,比如CPU的插座Socket 370, Socket 462, Socket AM3,这个大家都很容易理解,木有异议。让人很费解的是这货出现在软件领域(广义)时,就硬生生改名套接字了。   然后真正将socket概念发扬光大的,是1983年4.2BSD的发布,这是伯克利推出内含TCP/...

124

Linux网络编程 | Socket编程

TCP 缺点:慢,效率低,占用系统资源高,易被攻击,TCP 在传输数据之前, 要先建立连接,这会消耗时间,而且在数据传递时,确认机制,重传机制,拥塞 机制等都会消耗大量时间,而且要在每台设备上维护所有的传输连接,事实上, 每个连接都会占用系统的 CPU、内存等硬件资源。②UDP 的优点:快速,比 TCP 稍安全,UDP 没有 TCP 的握手,确认,窗口,重传,拥塞控制等机制,UDP 是一个无状态的传输协议,所以它在传递数据时非常 快。服务器监听客户端的请求,并不需要知晓客户端的ip信息。

学编程的小K的博客 125

初识网络——协议,OSI模型,MAC,IP,Socket编程

本文概述了计算机网络的发展历程和关键协议原理。首先介绍了从局域网(LAN)到广域网(WAN)的技术演进,反映了人类协作突破空间限制的过程。然后重点讲解了协议的本质和分层结构,包括OSI七层模型和实际应用的TCP/IP五层模型,强调协议本质是标准化的结构体。在网络传输流程部分,详细解释了MAC地址、IP地址的区别与联系,通过唐僧取经的类比生动说明了IP负责全局路由、MAC负责局部传输的协作机制。文章最后指出,网络通信本质上是协议栈之间的交互,这种分层设计实现了模块化与解耦,使得不同系统能够互联互通。

二哈的博客 1219

TCP,UDP和socket,Http之间联系和区别面

1、TCP协议 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。   在因特网协议族(Internet protocol suite)中,TCP层是位于I...

春风化雨 1061

网络数据到底怎样的传输过程?什么是网络编程?一文教你简单入门 linux下socket网络编程 —— 客户端篇(TCP协议传输)!

socket网络编程入门篇之客户端socket网络编程入门篇之客户端1、网络编程入门篇——前章1.1、网络数据传输过程1.2、什么是socket套接字1.3、网络结构体1.4、网络字节序 (Network Byte Order)和本机转换2、网络编程入门篇——客户端篇2.1、创建socket()2.2、发起连接(connect())2.3、数据读写(send()+recv())2.3.1、数据读(recv())2.3.2、数据写(recv())2.4、关闭连接(close())2、网络编程入门篇 —— 服

JMW1407的博客 4431

TCP,UDP和socket,Http之间联系和区别

TCP,UDP和socket,Http之间联系和区别

weixin_39527642的博客 291
上一篇: BSD 操作系统的历史、影响及贡献
下一篇: 什么是缓冲区?缓冲区概念/示例/作用/风险/实现讲解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天河书阁 VicRestart

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值