[转帖]fio工具中的iodepth参数与numjobs参数-对测试结果的影响
测试环境
3台服务器:ceph配置内外网分离,外网使用万兆线,内网使用千兆线,osd共21个。
1台客户端:安装fio工具、内核客户端,使用万兆线。
测试目的
针对fio工具中的iodepth(队列深度)和numjobs(线程数)参数,分析使用fio工具时,哪个参数对带宽值测试结果影响比较大。
测试思路
测试过程:集群通过内核客户端挂载到客户机上,fio工具参数中,使用块大小为1M,一次测试写入10G文件,测试时间300s。测试过程中,观察磁盘的读写速度、使用率、IO操作的服务时间与IO请求的处理时间等参数,并记录带宽值与延时时间。
测试场景:
1、单独使用iodepth参数,测试块大小为1M随机读写,记录带宽值与延时时间等;
2、单独使用numjobs参数,测试块大小为1M随机读写,记录带宽值与延时时间等;
3、同时使用iodepth、numjobs参数,保持numjobs参数为1,加大iodepth参数,测试块大小为1M随机读写,记录带宽值与延时时间等;
4、同时使用iodepth、numjobs参数,保持iodepth参数为1,加大numjobs参数,测试块大小为1M随机读写,记录带宽值与延时时间等;
5、同时使用iodepth、numjobs参数,iodepth与numjobs参数值相等,测试块大小为1M随机读写,记录带宽值与延时时间等。
测试过程命令
1.1 单独测试IO深度,IO深度为1,1M随机写
fio -filename=/xuqi/ceph/iow1 -direct=1 -iodepth=1 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=18605KB/s,clat=55ms
1.2 单独测试IO深度,IO深度为2,1M随机写
fio -filename=/xuqi/ceph/iow2 -direct=1 -iodepth=2 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=18993KB/s,clat=107ms
1.3 单独测试IO深度,IO深度为4,1M随机写
fio -filename=/xuqi/ceph/iow4 -direct=1 -iodepth=4 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=18295KB/s,clat=223ms
1.4 单独测试IO深度,IO深度为8,1M随机写
fio -filename=/xuqi/ceph/iow8 -direct=1 -iodepth=8 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=18801KB/s,clat=435ms
1.5 单独测试IO深度,IO深度为16,1M随机写
fio -filename=/xuqi/ceph/iow16 -direct=1 -iodepth=16 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=18523KB/s,clat=882ms
2.1 单独测试numjobs,numjobs为1,1M随机写
fio -filename=/xuqi/ceph/njw1 -direct=1 -numjobs=1 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=18647KB/s,clat=54ms
2.2 单独测试numjobs,numjobs为2,1M随机写
fio -filename=/xuqi/ceph/njw2 -direct=1 -numjobs=2 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=34620KB/s,clat=59ms
2.3 单独测试numjobs,numjobs为4,1M随机写
fio -filename=/xuqi/ceph/njw4 -direct=1 -numjobs=4 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=57983KB/s,clat=70ms
2.4 单独测试numjobs,numjobs为8,1M随机写
fio -filename=/xuqi/ceph/njw8 -direct=1 -numjobs=8 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=92872KB/s,clat=88ms
2.5 单独测试numjobs,numjobs为16,1M随机写
fio -filename=/xuqi/ceph/njw16 -direct=1 -numjobs=16 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=134340KB/s,clat=121ms
3.1 numjobs=1,IO深度为1,1M随机写
fio -filename=/xuqi/ceph/inw1 -direct=1 -iodepth=1 -numjobs=1 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=18494KB/s,clat=55ms
3.2 numjobs=1,IO深度为2,1M随机写
fio -filename=/xuqi/ceph/inw2 -direct=1 -iodepth=2 -numjobs=1 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=18709KB/s,clat=109ms
3.3 numjobs=1,IO深度为4,1M随机写
fio -filename=/xuqi/ceph/inw4 -direct=1 -iodepth=4 -numjobs=1 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=18678KB/s,clat=219ms
3.4 numjobs=1,IO深度为8,1M随机写
fio -filename=/xuqi/ceph/inw8 -direct=1 -iodepth=8 -numjobs=1 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=18837KB/s,clat=434ms
3.5 numjobs=1,IO深度为16,1M随机写
fio -filename=/xuqi/ceph/inw16 -direct=1 -iodepth=16 -numjobs=1 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=18792KB/s,clat=869ms
4.1 IO深度为1,numjobs=1,1M随机写
4.2 IO深度为1,numjobs=2,1M随机写
fio -filename=/xuqi/ceph/niw2 -direct=1 -iodepth=1 -numjobs=2 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=34620KB/s,clat=59ms
4.3 IO深度为1,numjobs=4,1M随机写
fio -filename=/xuqi/ceph/niw4 -direct=1 -iodepth=1 -numjobs=4 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=58827KB/s,clat=69ms
4.4 IO深度为1,numjobs=8,1M随机写
fio -filename=/xuqi/ceph/niw8 -direct=1 -iodepth=1 -numjobs=8 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=91264KB/s,clat=89ms
4.5 IO深度为1,numjobs=16,1M随机写
fio -filename=/xuqi/ceph/niw16 -direct=1 -iodepth=1 -numjobs=16 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=135186KB/s,clat=121ms
5.1 单独测试IO深度,IO深度为1,1M随机读
fio -filename=/xuqi/ceph/iow1 -direct=1 -iodepth=1 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=66847KB/s,clat=15ms
5.2 单独测试IO深度,IO深度为2,1M随机读
fio -filename=/xuqi/ceph/iow2 -direct=1 -iodepth=2 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=67005KB/s,clat=30ms
5.3 单独测试IO深度,IO深度为4,1M随机读
fio -filename=/xuqi/ceph/iow4 -direct=1 -iodepth=4 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=66533KB/s,clat=61ms
5.4 单独测试IO深度,IO深度为8,1M随机读
fio -filename=/xuqi/ceph/iow8 -direct=1 -iodepth=8 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=68366KB/s,clat=119ms
5.5 单独测试IO深度,IO深度为16,1M随机读
fio -filename=/xuqi/ceph/iow16 -direct=1 -iodepth=16 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=68800KB/s,clat=237ms
6.1 单独测试numjobs,numjobs为1,1M随机读
fio -filename=/xuqi/ceph/njw1 -direct=1 -numjobs=1 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=68255KB/s,clat=15ms
6.2 单独测试numjobs,numjobs为2,1M随机读
fio -filename=/xuqi/ceph/njw2 -direct=1 -numjobs=2 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=123516KB/s,clat=16ms
6.3 单独测试numjobs,numjobs为4,1M随机读
fio -filename=/xuqi/ceph/njw4 -direct=1 -numjobs=4 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=205883KB/s,clat=19ms
6.4 单独测试numjobs,numjobs为8,1M随机读
fio -filename=/xuqi/ceph/njw8 -direct=1 -numjobs=8 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=274756KB/s,clat=29ms
6.5 单独测试numjobs,numjobs为16,1M随机读
fio -filename=/xuqi/ceph/njw16 -direct=1 -numjobs=16 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=302328KB/s,clat=54ms
7.1 numjobs=1,IO深度为1,1M随机读
fio -filename=/xuqi/ceph/inw1 -direct=1 -iodepth=1 -numjobs=1 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=69037KB/s,clat=14ms
7.2 numjobs=1,IO深度为2,1M随机读
fio -filename=/xuqi/ceph/inw2 -direct=1 -iodepth=2 -numjobs=1 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=68272KB/s,clat=29ms
7.3 numjobs=1,IO深度为4,1M随机读
fio -filename=/xuqi/ceph/inw4 -direct=1 -iodepth=4 -numjobs=1 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=66958KB/s,clat=61ms
7.4 numjobs=1,IO深度为8,1M随机读
fio -filename=/xuqi/ceph/inw8 -direct=1 -iodepth=8 -numjobs=1 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=66708KB/s,clat=122ms
7.5 numjobs=1,IO深度为16,1M随机读
fio -filename=/xuqi/ceph/inw16 -direct=1 -iodepth=16 -numjobs=1 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=67542KB/s,clat=241ms
8.1 IO深度为1,numjobs=1,1M随机读
8.2 IO深度为1,numjobs=2,1M随机读
fio -filename=/xuqi/ceph/niw2 -direct=1 -iodepth=1 -numjobs=2 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=123773KB/s,clat=16ms
8.3 IO深度为1,numjobs=4,1M随机读
fio -filename=/xuqi/ceph/niw4 -direct=1 -iodepth=1 -numjobs=4 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=202943KB/s,clat=20ms
8.4 IO深度为1,numjobs=8,1M随机读
fio -filename=/xuqi/ceph/niw8 -direct=1 -iodepth=1 -numjobs=8 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=266208KB/s,clat=30ms
8.5 IO深度为1,numjobs=16,1M随机读
fio -filename=/xuqi/ceph/niw16 -direct=1 -iodepth=1 -numjobs=16 -thread -rw=randread -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Read
bw=295396KB/s,clat=55ms
9.1 IO深度为4,numjobs=4,1M随机写
fio -filename=/xuqi/ceph/dd1 -direct=1 -iodepth=4 -numjobs=4 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
bw=60076KB/s, iops=58,clat=272ms
9.2 IO深度为16,numjobs=16,1M随机写
fio -filename=/xuqi/ceph/dd16 -direct=1 -iodepth=16 -numjobs=16 -thread -rw=randwrite -ioengine=libaio -bs=1M -size=10G -runtime=180 -group_reporting -name=Fio_Write
Fio_Write: (g=0): rw=randwrite, bs=1M-1M/1M-1M/1M-1M, ioengine=libaio, iodepth=16
bw=136774KB/s, iops=133
测试结果汇总:
1、单独测试IO深度
| 测试项 | IO深度 | 带宽 | 延时 |
| 1M随机写 | 1 | 18.2MB/s | 55ms |
| 2 | 18.5MB/s | 107ms | |
| 4 | 17.9MB/s | 223ms | |
| 8 | 18.4MB/s | 435ms | |
| 16 | 18.1MB/s | 882ms | |
| 1M随机读 | 1 | 65.3MB/s | 15ms |
| 2 | 65.4MB/s | 30ms | |
| 4 | 65MB/s | 61ms | |
| 8 | 66.8MB/s | 119ms | |
| 16 | 67.2MB/s | 237ms |
2、单独测试numjobs
| 测试项 | Numjobs值 | 带宽 | 延时 |
| 1M随机写 | 1 | 18.2MB/s | 54ms |
| 2 | 33.8MB/s | 59ms | |
| 4 | 56.6MB/s | 70ms | |
| 8 | 90.7MB/s | 88ms | |
| 16 | 131.2MB/s | 121ms | |
| 1M随机读 | 1 | 66.7MB/s | 15ms |
| 2 | 120.6MB/s | 16ms | |
| 4 | 201.1MB/s | 19ms | |
| 8 | 268.3MB/s | 29ms | |
| 16 | 295.2MB/s | 54ms |
3、保持numjobs=1,增加IO深度
| 测试项 | IO深度 | 带宽 | 延时 |
| 1M随机写 | 1 | 18.1MB/s | 55ms |
| 2 | 18.3MB/s | 109ms | |
| 4 | 18.3MB/s | 219ms | |
| 8 | 18.4MB/s | 434ms | |
| 16 | 18.4MB/s | 869ms | |
| 1M随机读 | 1 | 67.4MB/s | 14ms |
| 2 | 66.7B/s | 29ms | |
| 4 | 65.4MB/s | 61ms | |
| 8 | 65.1MB/s | 122ms | |
| 16 | 66MB/s | 241ms |
4、保持IO深度为1,增加numjobs
| 测试项 | Numjobs值 | 带宽 | 延时 |
| 1M随机写 | 1 | 18.1MB/s | 55ms |
| 2 | 33.8MB/s | 59ms | |
| 4 | 57.4MB/s | 69ms | |
| 8 | 89.1MB/s | 89ms | |
| 16 | 132MB/s | 121ms | |
| 1M随机读 | 1 | 67.4MB/s | 14ms |
| 2 | 120.9MB/s | 16ms | |
| 4 | 198.2MB/s | 20ms | |
| 8 | 260MB/s | 30ms | |
| 16 | 288.5MB/s | 55ms |
5、IO深度与numjobs值相等,1M随机写
| 测试项 | Numjobs值 | Iodepth值 | 带宽 | 延时 |
| 1M随机写 | 4 | 4 | 58.7MB/s | 272ms |
| 16 | 16 | 133.6MB/s | 1905ms |
测试结果:
| 值 | 延时 | ||
| 最大带宽 | 1M随机写 | 132MB/s | 121ms |
| 1M随机读 | 295.2MB/s | 54ms |
分析:
在测试过程中,观察到的情况如下:
1、单独使用iodepth参数,来测试1M块大小的随机读写,可以看出,无论是随机读还是随机写,增加iodepth参数时,带宽值没有显著变化,而每一次延时比上一次延时基本是成倍增加的。且随着iodepth参数的加大,观察到磁盘读写速度与磁盘使用率等慢慢增加,但幅度不大,说明单独增加iodepth参数的值不会增加集群压力。
2、单独使用numjobs参数来测试1M块大小的随机读写,可以看出,无论是随机读还是随机写,增加numjobs参数时,每一次测出的带宽值比起上次测出的带宽值基本上有较大幅度的增加,有的是成倍的增加,但是延时总体来说没有增加很多。且随着numjobs参数的加大,观察到磁盘读写速度与磁盘使用率等快速增加,幅度较大。
3、保持numjobs参数为1,增加iodepth参数值,来测试1M块大小的随机读写,可以看出,无论是随机读还是随机写,增加iodepth参数时,带宽值没有显著变化,而每一次延时比上一次延时基本是成倍增加的。
4、保持iodepth参数为1,增加numjobs参数值,来测试1M块大小的随机读写,可以看出,无论是随机读还是随机写,增加numjobs参数时,每一次测出的带宽值比起上次测出的带宽值基本上有较大幅度的增加,有的是成倍的增加,但是延时总体来说没有增加很多。
5、保持iodepth 和numjobs分别为4 ,测试混合设置后测试的结果值与numjobs为4但是延时较iodepth为1的时候增加4倍。,iodepth为1对比发现2者测试结果带宽值差不多.
6、保持iodepth 和numjobs分别为16 ,测试混合设置后测试的结果值与numjobs为16,iodepth为1对比发现2者测试结果差不多. 但是延时较iodepth为1的时候增加16倍。
总结:此次测试结果中,使用numjobs参数测试出的效果要好,更能够增加集群客户端测试压力,使测试结果更准确。而iodepth参数设置后,集群带宽值几乎不变,反而延时随着iodepth增加而成倍增加。混合设置后也同样如此,随着iodepth的值增加,带宽值没有增加,反而延时成倍增加。所有延时增加的倍数刚好是iodepth增加的倍数。
该结果,有待观察。
</article>
[转帖]fio工具中的iodepth参数与numjobs参数-对测试结果的影响的更多相关文章
- 磁盘测试工具FIO工具安装和使用方法
一.FIO工具安装: 1.查看fio是否安装 [root@localhost /]#rpm –qa|grep fio 2.源码安装(推荐) 官网地址:http://freecode.com/proje ...
- 使用FIO工具测试块存储性能
Linux实例和Windows实例都推荐使用FIO工具测试块存储性能. 说明 您也可以使用其他工具测试块存储性能,但不同工具测试出来的硬盘基准性能会有差异,如dd.sysbench.iometer ...
- 云计算&存储测试:FIO工具入门与实战
一.关于FIO 1.1 简介 FIO是一个开源的I/O压力测试工具,主要是用来测试磁盘的IO性能,也可测试cpu,nic的IO性能.它可以支持13种不同的I/O引擎,包括:sync,mmap, lib ...
- Linux Netcat 命令——网络工具中的瑞士军刀
原文:http://www.oschina.net/translate/linux-netcat-command netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据.通过与其他 ...
- Jni中C++和Java的参数传递 参数对照
Jni中C++和Java的参数传递 如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jni不甚了解,不知道Jni是做什么的,如何建立一个基本的jni程序,或许可以参考下面下面这些文章:利用V ...
- 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针
您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...
- Django中ORM介绍和字段及其参数
ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...
- 使用chrome开发者工具中的network面板测量网站网络性能
前面的话 Chrome 开发者工具是一套内置于Google Chrome中的Web开发和调试工具,可用来对网站进行迭代.调试和分析.使用 Network 面板测量网站网络性能.本文将详细介绍chrom ...
- 在chrome开发者工具中观察函数调用栈、作用域链与闭包
在chrome开发者工具中观察函数调用栈.作用域链与闭包 在chrome的开发者工具中,通过断点调试,我们能够非常方便的一步一步的观察JavaScript的执行过程,直观感知函数调用栈,作用域链,变量 ...
- 在 Chrome 开发者工具中调试 node.js
命令行工具 devtool ,它可以在 Chrome 的开发者工具中运行 Node.js 程序. 下面的记录显示了在一个 HTTP 服务器中设置断点的情况. 该工具基于 Electron 将 Node ...
随机推荐
- 2023-08-16:用go语言如何解决进击的骑士算法问题呢?
2023-08-16:用go写算法.一个坐标可以从 -infinity 延伸到 +infinity 的 无限大的 棋盘上, 你的 骑士 驻扎在坐标为 [0, 0] 的方格里. 骑士的走法和中国象棋中的 ...
- AES加密技术:原理与应用
一.引言 随着信息技术的飞速发展,数据安全已成为越来越受到重视的领域.加密技术作为保障数据安全的重要手段,在信息安全领域发挥着举足轻重的作用.AES(Advanced Encryption Stand ...
- 大道如青天,协程来通信,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang通道channel的使用EP14
众所周知,Go lang的作用域相对严格,数据之间的通信往往要依靠参数的传递,但如果想在多个协程任务中间做数据通信,就需要通道(channel)的参与,我们可以把数据封装成一个对象,然后把这个对象的指 ...
- Java 将PPT转为OFD
本文以Java后端程序代码展示如何实现将PPT幻灯片转成OFD格式.下面是具体步骤. 步骤1:安装PPT库-Spire.Presentation for Java 方法一.通过Maven仓库安装.在p ...
- 教你VUE中的filters过滤器2种用法
摘要:Vue.js 允许我们自定义过滤器,可被用于一些常见的文本格式化. 本文分享自华为云社区<VUE中的filters过滤器用法>,作者:小小张自由--张有博. 前言 Vue.js 允许 ...
- Ubuntu 安装 MySQL 5.7
一.安装MySQL 1. 删除Mysql 数据库 sudo apt autoremove --purge mysql-server-* sudo apt remove mysql-server sud ...
- compilation.templatesPlugin is not a function
ERROR Failed to compile with 1 error TypeError: compilation.templatesPlugin is not a function - SetV ...
- 【开源项目推荐】——纯中文本地GPT知识库搭建项目.assets
大家好,我是独孤风. 又到了本周的开源项目推荐.近一年多的时间,人工智能迎来了大爆发.GPT相关的大模型的发展让很多领域都发生了巨大的变化. 但是虽然GPT的自然语言识别功能异常的强大,但回答给我们的 ...
- flask自定义参数校验、序列化和反序列化
项目总体结构 我的工厂函数factory.py from settings import setting from flask import Flask from models.models impo ...
- 3-3 vector 和 迭代器
1 vector 容器vector可以理解为变长数组,它里面放的是相同类型的元素. vector<int> vec={1,2,3,4};//拷贝构造 vector<string> ...