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

4. 数据类型

4.1 数据类型分类

分类
数据类型
说明
数值类型
BIT(M)
位类型。M指定位数,默认值1,范围1 - 64
TINYINT [UNSIGNED]
带符号的范围 -128 ~ 127,无符号范围0 ~ 255,默认有符号
BOOL
使用0和1表示真和假
SMALLINT [UNSIGNED]
带符号是次方到,无符号是

INT [UNSIGNED]
带符号是次方到,无符号是

BIGINT [UNSIGNED]
带符号是次方到,无符号是

FLOAT(M,D)[UNSIGNED]
M指定显示长度,D指定小数位数,占用4字节
DOUBLE[(M,D)][UNSIGNED]
表示比float精度更大的小数,占用空间8字节
DECIMAL(M,D)[UNSIGNED]
定点数,M指定长度,D表示小数点的位数
文本、二进制类型
CHAR(size)
固定长度字符串,最大255
文本、二进制类型
VARCHAR(SIZE)
可变长度字符串,最大长度65535
文本、二进制类型
BLOB
二进制数据
文本、二进制类型
TEXT
大文本,不支持全文索引,不支持默认值
时间日期类型
DATE/DATETIME/TIMESTAMP
日期类型(yyyy - nn - dd)、(yyyy - n - d hh:mm:ss),timestamp时间戳
String类型
ENUM类型
ENUM是一个字符串对象,其值来自表创建时在列规定中显示枚举的一列值
SET类型
SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。指定包括多个set成员的set列值时各成员之间用逗号间隔开,set成员值本身不能包含逗号

4.2 数值类型

类型
字节
最小值(带符号的/无符号的)
最大值(带符号的/无符号的)
TINYINT
1
-128 / 0
127 / 255
SMALLINT
2
-32768 / 0
32767 / 65535
MEDIUMINT
3
-8388608 / 0
8388607 / 16777215
INT
4
-2147483648 / 0
2147483647 / 4294967295
BIGINT
8
-9223372036854775808 / 0
9223372036854775807 / 18446744073709551615

4.2.1 tinyint类型

  1. 数值越界测试
mysql> create table tt1(num tinyint); Query OK, 0 rows affected (0.02 sec) mysql> insert into tt1 values(1); Query OK, 1 row affected (0.00 sec) mysql> insert into tt1 values(128); -- 越界插入,报错 ERROR 1264 (22003): Out of range value for column 'num' at row 1 mysql> select * from tt1; | num | +-----+ | 1 | +-----+ 1 row in set (0.00 sec)
说明:在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。可以通过UNSIGNED来说明某个字段是无符号的。2. 无符号案例
mysql> create table tt2(num tinyint unsigned); mysql> insert into tt2 values(-1); -- 无符号,范围是: 0 - 255 ERROR 1264 (22003): Out of range value for column 'num' at row 1 mysql> insert into tt2 values(255); Query OK, 1 row affected (0.02 sec) mysql> select * from tt2; | num | +-----+ | 255 | +-----+ 1 row in set (0.00 sec)
注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。

4.2.2 bit类型

  1. 基本语法:bit[(M)] :位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。
  2. 举例
mysql> create table tt4 ( id int, a bit(8)); Query OK, 0 rows affected (0.01 sec) mysql> insert into tt4 values(10, 10); Query OK, 1 row affected (0.01 sec) mysql> select * from tt4; #发现很怪异的现象,a的数据10没有出现 | id | a | +----+---+ | 10 | | +----+---+ 1 row in set (0.00 sec)
  1. bit使用的注意事项:bit字段在显示时,是按照ASCII码对应的值显示。
mysql> insert into tt4 values(65, 65); mysql> select * from tt4; | id | a | +----+---+ | 10 | | | 65 | A | +----+---+
如果我们有这样的值,只存放0或1,这时可以定义bit(1)。这样可以节省空间。
mysql> create table tt5(gender bit(1)); mysql> insert into tt5 values(0); Query OK, 1 row affected (0.00 sec) mysql> insert into tt5 values(1); Query OK, 1 row affected (0.00 sec) mysql> insert into tt5 values(2); -- 当插入2时,已经越界了 ERROR 1406 (22001): Data too long for column 'gender' at row 1

4.2.3 小数类型

4.2.3.1 float
  1. 语法:float[(m, d)] [unsigned] :M指定显示长度,d指定小数位数,占用空间4个字节。
  2. 案例:小数float(4,2)表示的范围是 -99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。
mysql> create table tt6(id int, salary float(4,2)); Query OK, 0 rows affected (0.01 sec) mysql> insert into tt6 values(100, -99.99); Query OK, 1 row affected (0.00 sec) mysql> insert into tt6 values(101, -99.991); #多的这一点被拿掉了 Query OK, 1 row affected (0.00 sec) mysql> select * from tt6; | id | salary | +-----+--------+ | 100 | -99.99 | | 101 | -99.99 | +-----+--------+ 2 rows in set (0.00 sec)
问题:当我们的float(4,2)如果是一个有符号的,则表示范围是 -99.99 ~ 99.99,如果float(6,3),请同学们说说范围是多少?3. 案例:如果定义的是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是0 ~ 99.99。
mysql> create table tt7(id int, salary float(4,2) unsigned); Query OK, 0 rows affected (0.01 sec) mysql> insert into tt7 values(100, -0.1); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> show warnings; | Level | Code | Message | +-------+------+---------------------------+ | Warning | 1264 | Out of range value for column 'salary' at row 1 | +-------+------+---------------------------+ 1 row in set (0.00 sec) mysql> insert into tt7 values(100, -0); Query OK, 1 row affected (0.00 sec) mysql> insert into tt7 values(100, 99.99); Query OK, 1 row affected (0.00 sec)
4.2.3.2 decimal
  1. 语法:decimal(m, d) [unsigned] :定点数m指定长度,d表示小数点的位数。
  2. decimal(5,2) 表示的范围是 -999.99 ~ 999.99;decimal(5,2) unsigned 表示的范围0 ~ 999.99。
  3. decimal和float很像,但是有区别:float和decimal表示的精度不一样。
  4. 存在精度损失, 只不过相比于 float 来说精度更高.
mysql> create table tt8 ( id int, salary float(10,8), salary2 decimal(10,8)); mysql> insert into tt8 values(100,23.12345612, 23.12345612); Query OK, 1 row affected (0.00 sec) mysql> select * from tt8; | id | salary | salary2 | +-----+-----------+-----------+ | 100 | 23.12345695 | 23.12345612 | # 发现decimal的精度更准确,因此如果我们希望某个数据表示高精度,选择decimal +-----+-----------+-----------+
说明:float表示的精度大约是7位。decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0。如果m被省略, 默认是10
建议:如果希望小数的精度高,推荐使用decimal。

4.3 字符串类型

4.3.1 char

  1. 语法:char(L) :固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255。
  2. 案例(char)
mysql> create table tt9(id int, name char(2)); Query OK, 0 rows affected (0.00 sec) mysql> insert into tt9 values(100, 'ab'); Query OK, 1 row affected (0.00 sec) mysql> insert into tt9 values(101, '中国'); Query OK, 1 row affected (0.00 sec) mysql> select * from tt9; | id | name | +-----+------+ | 100 | ab | | 101 | 中国 | +-----+------+
说明: char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个,最多只能是255。
mysql> create table tt10(id int ,name char(256)); ERROR 1074 (42000): Column length too big for column 'name' (max = 255); use BLOB or TEXT instead

4.3.2 varchar

  1. 语法:varchar(L) :可变长度字符串,L表示字符长度,最大长度65535个字节。
  2. 案例
mysql> create table tt10(id int ,name varchar(6)); --表示这里可以存放6个字符 mysql> insert into tt10 values(100, 'hello'); mysql> insert into tt10 values(100, '我爱你,中国'); mysql> select * from tt10; | id | name | +-----+------------------+ | 100 | hello | | 100 | 我爱你,中国 | +-----+------------------+
说明:关于varchar(len),len到底是多大,这个len值,和表的编码密切相关。varchar长度可以指定为0到65535之间的值,但是有1 - 3个字节用于记录数据大小,所以说有效字节数是65532。当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532 / 3 = 21844[因为utf8中,一个字符占用3个字节],如果编码是 gbk,varchar(n)的参数n最大是65532 / 2 = 32766(因为gbk中,一个字符占用2字节)。
mysql> create table tt11(name varchar(21845))charset=utf8; --验证了utf8确实是不能超过21844 ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs mysql> create table tt11(name varchar(21844)) charset=utf8; Query OK, 0 rows affected (0.01 sec)

4.3.3 char和varchar比较

实际存储
char(4)
varchar(4)
char占用字节
varchar占用字节
abcd
abcd
abcd
4 * 3 = 12
4 * 3 + 1 = 13
A
A
A
4 * 3 = 12
1 * 3 + 1 = 4
Abcde
×
×
数据超过长度
数据超过长度
如何选择定长或变长字符串?
  • 如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5。
  • 如果数据长度有变化,就使用变长(varchar),比如:名字,地址,但是你要保证最长的能存得进去。
  • 定长的磁盘空间比较浪费,但是效率高。
  • 变长的磁盘空间比较节省,但是效率低。
  • 定长的意义是,直接开辟好对应的空间。
  • 变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。

4.4 日期和时间类型

常用的日期有如下三个:
  • date :日期'yyyy - mm - dd' ,占用三字节。
  • datetime :时间日期格式 'yyyy - mm - dd HH:ii:ss' 表示范围从1000到9999 ,占用八字节。
  • timestamp :时间戳,从1970年开始的 yyyy - mm - dd HH:ii:ss 格式和datetime完全一致,占用四字节。
案例
  1. 创建表
mysql> create table birthday (t1 date, t2 datetime, t3 timestamp); Query OK, 0 rows affected (0.01 sec)
  1. 插入数据
mysql> insert into birthday(t1,t2) values('1997-7-1','2008-8-8 12:1:1'); --插入两种时间 Query OK, 1 row affected (0.00 sec) mysql> select * from birthday; | t1 | t2 | t3 | +------------+--------------------+--------------------+ | 1997-07-01 | 2008-08-08 12:01:01 | 2017-11-12 18:28:55 | --添加数据时,时间戳自动补上当前时间 +------------+--------------------+--------------------+
  1. 更新数据
mysql> update birthday set t1='2000-1-1'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from birthday; | t1 | t2 | t3 | +------------+--------------------+--------------------+ | 2000-01-01 | 2008-08-08 12:01:01 | 2017-11-12 18:32:09 | -- 更新数据,时间戳会更新成当前时间 +------------+--------------------+--------------------+

4.5 enum和set

  1. 语法
  • enum:枚举,“单选”类型;enum('选项1','选项2','选项3',...)。该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,....最多65535个;当我们添加枚举值时,也可以添加对应的数字编号。
  • set:集合,“多选”类型;set('选项值1','选项值2','选项值3', ...)。该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,....最多64个。说明:不建议在添加枚举值、集合值的时候采用数字的方式,因为不利于阅读。
  1. 案例:有一个调查表votes,需要调查人的喜好,比如(登山,游泳,篮球,武术)中去选择(可以多选),(男,女)[单选]。
mysql> create table votes( -> username varchar(30), -> hobby set('登山','游泳','篮球','武术'), --注意:使用数字标识每个爱好的时候,想想Linux权限,采用比特位位置来和set中的爱好对应起来 -> gender enum('男','女')); --注意:使用数字标识的时候,就是正常的数组下标 Query OK, 0 rows affected (0.02 sec)
  1. 插入数据
insert into votes values('雷锋', '登山,武术', '男'); insert into votes values('Juse','登山,武术',2);
  1. 查询数据
select * from votes where gender=2;
结果:
| username | hobby | gender | | Juse | 登山,武术 |女
有如下数据,想查找所有喜欢登山的人:
| username | hobby | gender | | 雷锋 | 登山,武术 | 男 | | Juse | 登山,武术 | 女 | | LiLei | 登山 | 男 | | LiLei | 篮球 | 男 | | HanMeiMei | 游泳 | 女 |
使用如下查询语句:
mysql> select * from votes where hobby='登山';
结果:
| username | hobby | gender | | LiLei | 登山 | 男 |
不能查询出所有爱好为登山的人。5. 集合查询使用 find_in_set 函数:find_in_set(sub,str_list) :如果sub在str_list中,则返回下标;如果不在,返回0;str_list用逗号分隔的字符串。
mysql> select find_in_set('a', 'a,b,c');
结果:
| find_in_set('a', 'a,b,c') | | 1 |
mysql> select find_in_set('d', 'a,b,c');
结果:
| find_in_set('d', 'a,b,c') | | 0 |
查询爱好登山的人:
mysql> select * from votes where find_in_set('登山', hobby);
结果:
| username | hobby | gender | | 雷锋 | 登山,武术 | 男 | | Juse | 登山,武术 | 女 | | LiLei | 登山 | 男 |
对于 enum(枚举, 单选) 和 set(集合, 多选) 可以用 数字进行筛选.

相关文章:

4. 数据类型

4.1 数据类型分类 分类 数据类型 说明 数值类型 BIT(M) 位类型。M指定位数,默认值1,范围1 - 64 TINYINT [UNSIGNED] 带符号的范围 -128 ~ 127,无符号范围0 ~ 255,默认有符号 BOOL 使用0和1表示真和假 SMALLINT [UNSIGNED] 带符号是…...

MySQL基础(二)SQL语言、客户端工具

目录 三、SQL语言 3.1 概念 3.2 基本操作 四、客户端工具 三、SQL语言 3.1 概念 SQL(Structured Query Language)结构化查询语言。SQL用于对存储数据,更新,查询和管理关系型数据库的程序设计语言。 通常执行对数据库的增删改…...

【贪心、DP、线段树优化】Leetcode 376. 摆动序列

贪心算法:选 “关键转折点” 初始状态:把数组第一个元素当作起点,此时前一个差值符号设为平坡(即差值为0)。遍历数组:从第二个元素开始,依次计算当前元素和前一个元素的差值。差值符号判断&…...

CppCon 2015 学习:C++ in the audio industry

实时编程(real-time programming):音频处理对延迟极度敏感,要求代码必须非常高效且稳定。无锁线程同步(lock-free thread synchronization):避免阻塞,提高性能,尤其是在多…...

C++算法-动态规划2

第 4 题 字符串分割 (Word Break) 难度: Medium备注:出自 leetcode题目描述 Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words. For example, given s "l…...

软信天成:数据驱动型背后的人工智能,基于机器学习的数据管理

在数字化转型浪潮中,当代企业如同逆水行舟,不进则退。无数企业希望通过数字化转型捕获全新的市场机遇,改善财政状况,在未来市场竞争中占据一席之地。要想获得成功的数字化转型,关键因素在于具备可靠、及时的数据用以支…...

MySQL提升

事务 事务:在多个操作合在一起视为一个整体。要么就不做、要么就做完。 事务应该满足ACID A : 原子性。不可分割。C : 一致性。追求的目标,在开始到结束没有发生预定外的情况。I : 隔离性。不同的事务是独立的。D : 持久性。系统崩溃,数据依然…...

hbase资源和数据权限控制

hbase适合大数据量下点查 https://zhuanlan.zhihu.com/p/471133280 HBase支持对User、NameSpace和Table进行请求数和流量配额限制,限制频率可以按sec、min、hour、day 对于请求大小限制示例(5K/sec,10M/min等),请求大小限制单位如…...

VMWare下设置共享文件,/mnt/hgfs下却不显示共享文件的解决方法

一、共享文件夹设置步骤 打开虚拟机设置:右键点击虚拟机 → 选择 “设置” → 切换到 “选项” 标签页 → 点击 “共享文件夹”启用共享功能:选择 “总是启用”(确保虚拟机已关闭或处于运行状态)添加共享文件夹: 点击…...

go语言的锁

本篇文章主要讲锁,主要会涉及go的sync.Mutex和sync.RWMutex。 一.锁的概念和发展 1.1 锁的概念 所谓的加锁和解锁其实就是指一个数据是否被占用了,通过Mutex内的一个状态来表示。 例如,取 0 表示未加锁,1 表示已加锁&#xff…...

C++11完美转发

在 C11 之前,泛型函数在传递参数时无法保证参数的原始类型(左值或右值)导致额外的拷贝或移动操作,完美转发是一种高效传递技术,能够保持参数的原始特性,避免额外的性能开销 完美转发是指在泛型编程中以参数…...

VUE解决页面请求接口大规模并发的问题(请求队列)

方案1: 请求队列 // RequestQueue.js export default class RequestQueue {constructor(maxConcurrent) {this.maxConcurrent maxConcurrent; // 最大并发请求数this.currentConcurrent 0; // 当前并发请求数this.queue []; // 请求队列this.requestId 0; // …...

IDEA安装迁移IDEA配置数据位置

需求 因为C盘有清空风险,需要把IDEA(2025)安装位置以及配置数据都挪到D盘。 安装 到官网下载安装包 安装,这里可以改下安装位置 这几个选项随意,然后一直下一步就好 完成后重启或不重启都随意 迁移数据 初次安…...

Blazor-表单提交的艺术:如何优雅地实现 (下)

在上一章节中我们使用HTML的方式介绍了如何在Blazor框架下进行表单的提交&#xff0c;而在Blazor框架中也为我们内置了<EditForm>组件来代替原始的HTML,<form>&#xff0c;下面我们将对<EditForm>的用法进行讲解&#xff0c;并将两种表单方式进行对比&#x…...

五子棋网络对战游戏的设计与实现设计与实现【源码+文档】

五子棋网络对战游戏的设计与实现 摘 要 在现代社会中,及其它无线设备越来越多的走进普通老百姓的工作和生活。随着3G技术的普及与应用&#xff0c;基于Java开发的软件在上的使用非常的广泛&#xff0c;增值服务的内容也是越来越多&#xff0c;对丰富人们的生活内容、提供快…...

Vue基础(14)_列表过滤、列表排序

Array.prototype.filter()【ES5】 filter() 方法创建给定数组一部分的浅拷贝&#xff0c;其包含通过所提供函数实现的测试的所有元素。 语法&#xff1a; filter(callbackFn) filter(callbackFn, thisArg) 参数&#xff1a; callbackFn(回调函数)&#xff1a;为数组中的每个元…...

Spring Boot项目中JSON解析库的深度解析与应用实践

在现代Web开发中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;作为轻量级的数据交换格式&#xff0c;已成为前后端通信的核心桥梁。Spring Boot作为Java生态中最流行的微服务框架&#xff0c;提供了对多种JSON库的无缝集成支持。本文将深入探讨Spring B…...

我用Amazon Q写了一个Docker客户端,并上架了懒猫微服商店

自从接触了Amazon Q&#xff0c;我陆陆续续写了不少小软件&#xff0c;其中这个项目是一个典型的例子&#xff0c;自己平时来使用&#xff0c;也分享给一些 NAS 爱好者来用。 故事还要用上次折腾黑群晖说起&#xff0c;本意想把 NAS 和打印机共享二合一的&#xff0c;所以把闲着…...

Django CMS 的 Demo

以下是关于 Django CMS 的 Demo 示例及相关资源的整理 安装与运行 Django CMS 示例 使用 djangocms-installer 快速创建 Django CMS 项目&#xff1a; pip install django_cms djangocms -p . mysite安装记录 pip install django-cms Looking in indexes: https://pypi.tun…...

在 UE5 蓝图中配置Actor类型的Asset以作为位置和旋转设置目标

目标 UE5的蓝图的事件图表里面&#xff0c;有一个模块&#xff08;节点&#xff09;如图&#xff0c;这是一个设置Actor的location和rotation量的模块&#xff0c;其中需要接收一个Target作为输入&#xff0c;这个Target应该就是一个在map中具备location和rotation信息的实例化…...

Android 之 kotlin 语言学习笔记四(Android KTX)

一、Android KTX 简介 Android KTX 是包含在 Android Jetpack 及其他 Android 库中的一组 Kotlin 扩展程序。KTX 扩展程序可以为 Jetpack、Android 平台及其他 API 提供简洁的惯用 Kotlin 代码。为此&#xff0c;这些扩展程序利用了多种 Kotlin 语言功能&#xff0c;其中包括&…...

适用于vue3的大屏数据展示组件库DataV(踩坑版)

踩坑版 如果按照官网(https://datav-vue3.jiaminghi.com/)的vue3安装有问题 官网是将dataview/datav-vue3 安装为本地依赖 npm install dataview/datav-vue31、跑起来报错&#xff08;报错信息忘记保留了&#xff09; 有人说找到node_modules&#xff0c; 安装成功后会有这个…...

mysql实现分页查询

文章目录 mysql实现分页查询1. 使用LIMIT和OFFSET2. 使用计算OFFSET的函数&#xff08;适用于动态分页&#xff09;3. 使用MySQL的变量&#xff08;适用于存储过程&#xff09; 获取所有用户数据并分页 mysql实现分页查询 在MySQL中实现分页查询&#xff0c;通常我们会使用LIM…...

Flink checkpoint

对齐检查点 (Aligned Checkpoint) Flink 的分布式快照机制受到 Chandy-Lamport 算法的启发。 其核心元素是数据流中的屏障&#xff08;Barrier&#xff09;。 Barrier 注入 &#xff1a;JobManager 中的 Checkpoint Coordinator 指示 Source 任务开始 Checkpoint。Source 任务…...

【java】在springboot中实现证书双向验证

证书生成 public static void main(String[] args) throws Exception {// 生成密钥对KeyPairGenerator keyPairGenerator KeyPairGenerator.getInstance("RSA");keyPairGenerator.initialize(2048);KeyPair keyPair keyPairGenerator.generateKeyPair();// 获取私…...

CppCon 2015 学习:Functional Design Explained

这两个 C 程序 不完全相同。它们的差异在于对 std::cout 的使用和代码格式。 程序 1&#xff1a; #include <iostream> int main(int argc, char** argv) {std::cout << "Hello World\n"; }解释&#xff1a;这个程序是 正确的。std::cout 是 C 标准库中…...

基于3D对象体积与直径特征的筛选

1&#xff0c;目的 筛选出目标3D对象。 效果如下&#xff1a; 2&#xff0c;原理 使用3D对象的体积与直径特征进行筛选。 3&#xff0c;代码解析 3.1&#xff0c;预处理2.5D深度图。 * 参考案例库&#xff1a;select_object_model_3d.hdev * ****************************…...

GIT - 如何从某个分支的 commit创建一个新的分支?

如果上一个Release 分支被污染了&#xff0c;想要还原这个分支最原始的样子&#xff0c;有什么办法或者说该怎么办呢&#xff1f;简单来说&#xff0c;就是如何从某个指定的 commit 创建一个新的 Git 分支&#xff1f; 操作非常简单&#xff01; 命令格式 git branch <ne…...

Claude vs ChatGPT vs Gemini:功能对比、使用体验、适合人群

随着AI应用全面进入生产力场景&#xff0c;市面上的主流AI对话工具也进入“三国杀”时代&#xff1a; Claude&#xff08;Anthropic&#xff09;&#xff1a;新锐崛起&#xff0c;语言逻辑惊艳&#xff0c;Opus 模型被称为 GPT-4 杀手ChatGPT&#xff08;OpenAI&#xff09;&a…...

线程基础编程

早期的计算机只能执行一个任务&#xff0c;一旦任务完成&#xff0c;计算机就会等待下一个任务。这种模型效率低下&#xff0c;无 法充分利用计算机的性能。 随着计算机技术的发展&#xff0c;操作系统开始支持多进程模型&#xff0c;即同时执行多个任务。每个任务被称为一个进…...