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

【Linux网络】TCP服务中IOService应用与实现

📢博客主页:https://blog.csdn.net/2301_779549673
📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 CSDN🙉
📢未来很长,值得我们全力奔赴更美好的生活✨

在这里插入图片描述

在这里插入图片描述

文章目录

  • 🏳️‍🌈一、TcpService.hpp
    • 1.1 TcpService类
    • 1.2 构造、析构函数
    • 1.3 Loop() 循环函数
  • 🏳️‍🌈二、Service.hpp
    • 2.1、IOService类基本结构
    • 2.2 构造函数、析构函数
    • 2.3 IOSExcute()
  • 🏳️‍🌈三、TcpServer.cpp
  • 👥总结


上一篇文章简单的将 Socket 类进行了封装,封装的目的是为了我们后序直接使用的,因此这篇文章使用封装好的Socket类实现网络计算器(加协议版本)的一部分轮廓,此处我们将执行方法单独放在一个文件!

🏳️‍🌈一、TcpService.hpp

我们这里使用 TcpServer 的多线程版本,如有其他版本的需要,可移步 传送门

1.1 TcpService类

TcpServer类成员变量端口号,监听套接字(封装的智能指针类型),运行状态和执行方法构造函数初始化成员变量即可!

namespace TcpServerModule{using namespace SocketModule;using namespace LogModule;using service_t = std::function<void(SocketModule::SockPtr, InetAddr&)>;class TcpServer{public:TcpServer(service_t service, uint16_t port){}void Loop(){}~TcpServer(){}private:uint16_t port;SockPtr _listensock;bool _isrunning;service_t _service;};
}

1.2 构造、析构函数

构造函数初始化成员变量并创建监听套接字(调用父类方法),析构函数无需处理!

TcpServer(service_t service, uint16_t port): _port(port), _listensock(std::make_shared<TcpSocket>()),_isrunning(false), _service(service) {_listensock->BuildListenSocket(port);
}
~TcpServer() {}

1.3 Loop() 循环函数

Loop()函数使用多线程的版本执行长服务,让新线程去执行主函数传递的执行方法!

void Loop() {_isrunning = true;while (_isrunning) {InetAddr client;// 获取客户端连接SockPtr cli = _listensock->Accepter(&client);if (cli == nullptr)continue;LOG(LogLevel::DEBUG)<< "get a new connection from " << client.AddrStr().c_str();// 获取成功pthread_t tid;// ThreadData 的头文件是ThreadData* td = new ThreadData(cli, this, client);pthread_create(&tid, nullptr, Execute, td); // 新线程分离}
}
// 线程函数参数对象
class ThreadData {
public:SockPtr _sockfd;TcpServer* _self;InetAddr _addr;public:ThreadData(SockPtr sockfd, TcpServer* self, const InetAddr& addr): _sockfd(sockfd), _self(self), _addr(addr) {}
};
// 线程函数
static void* Execute(void* args) {ThreadData* td = static_cast<ThreadData*>(args);// 子线程结束后由系统自动回收资源,无需主线程调用 pthread_joinpthread_detach(pthread_self()); // 分离新线程,无需主线程回收td->_self->_service(td->_sockfd, td->_addr);delete td;return nullptr;
}

🏳️‍🌈二、Service.hpp

该文件设计一个类,其中一个成员函数实现执行方法暂时先让服务端代码编译过即可,后序再加协议!

2.1、IOService类基本结构

class IOService{public:IOService();void IOExcute(SockPtr sock, InetAddr& addr);~IOService();
};

2.2 构造函数、析构函数

这个类没有成员变量,所以这两部分不需要处理

2.3 IOSExcute()

该函数时 TcpServer 中执行方法的具体实现,此处暂时只进行IO操作,保证编译通过

void IOExcute(SockPtr sock, InetAddr& addr) {while (true) {std::string message;// ssize_t Recv(std::string* out) override{}ssize_t n = sock->Recv(&message);if (n > 0) {LOG(LogLevel::INFO) << "get message: " << message << "from"<< addr.AddrStr().c_str();std::string rsp = "response test";sock->Send(rsp);} else if (n == 0) {LOG(LogLevel::INFO)<< "client " << addr.AddrStr().c_str() << " disconnected";break;} else {LOG(LogLevel::ERROR)<< "recv error for client: " << addr.AddrStr().c_str();break;}}
}

🏳️‍🌈三、TcpServer.cpp

创建TcpServer类对象,并调用执行函数运行服务端!

#include "TcpServer.hpp"
#include "Service.hpp"using namespace TcpServerModule;int main(int argc, char* argv[]){if(argc != 2){std::cerr << "Usage: " << argv[0] << " port" << std::endl;Die(1);}uint16_t port = std::stoi(argv[1]);IOService service;std::unique_ptr<TcpServer> tsvr = std::make_unique<TcpServer>(std::bind(&IOService::IOExcute, &service, std::placeholders::_1, std::placeholders::_2),port);tsvr->Loop();return 0;
}

👥总结

本篇博文对 【Linux网络】TCP服务中IOService应用与实现 做了一个较为详细的介绍,不知道对你有没有帮助呢

觉得博主写得还不错的三连支持下吧!会继续努力的~

相关文章:

【Linux网络】TCP服务中IOService应用与实现

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

终端运行java出现???

1.检查是否系统区域设置冲突&#xff08;控制面板 → 区域 → 管理 → 更改系统区域设置 → 勾选 Beta: UTF-8&#xff09;。 2.修改 Windows 终端编码 方法 1&#xff1a;临时修改&#xff08;当前窗口&#xff09; 在终端执行&#xff1a;cmd chcp 65001 …...

Mysql8.0 推出的强大功能 窗口函数(Window Functions)

&#x1f9e0; 一、什么是窗口函数&#xff1f; 窗口函数是 SQL 中一种在保留原始行的基础上&#xff0c;对行进行分组排序后执行聚合、排名、累计等计算的方法。 与传统的 GROUP BY 聚合不同的是&#xff1a; &#x1f449; 窗口函数不会把多行聚成一行&#xff0c;而是为每…...

opencv--通道,彩色和灰度

图像的灰度值和颜色值的区别 灰度值&#xff08;Grayscale Value&#xff09;和颜色值&#xff08;Color Value&#xff09;是描述像素信息的两种基本方式&#xff0c;它们的核心区别在于对颜色信息的表示方式和应用场景。 (1) 灰度值&#xff08;Grayscale Value&#xff09;…...

cmake 执行命令

在命令行中执行 CMake 的命令主要用于配置、生成和构建项目。以下是一些常用的 CMake 命令及其用法。 1. 配置项目 配置项目是 CMake 的第一步&#xff0c;它会根据 CMakeLists.txt 文件生成相应的构建系统文件&#xff08;如 Makefile 或 Visual Studio 解决方案文件&#x…...

Shell脚本-for循环语法结构

在Shell脚本编程中&#xff0c;for循环是一种非常常用的流程控制语句。它允许我们对一系列值进行迭代&#xff0c;并为每个值执行特定的命令或代码块。无论是处理文件列表、遍历目录内容还是简单的计数任务&#xff0c;for循环都能提供简洁而强大的解决方案。本文将详细介绍She…...

【AI落地应用实战】借助 Amazon Q 实现内容分发网络(CDN)CDK 构建的全流程实践

随着生成式 AI 技术的快速发展&#xff0c;开发者在构建云原生应用时正以前所未有的效率推进项目落地。而 Amazon Q&#xff0c;作为亚马逊云科技推出的专为开发者和 IT 人员设计的生成式 AI 助手&#xff0c;正逐步改变着我们与代码、基础设施以及 亚马逊云科技 服务交互的方式…...

Windows同步技术-使用命名对象

在 Windows 系统下使用命名对象&#xff08;如互斥体、事件、信号量、文件映射等内核对象&#xff09;时&#xff0c;需注意以下关键要点&#xff1a; 命名规则 唯一性&#xff1a;名称需全局唯一&#xff0c;避免与其他应用或系统对象冲突&#xff0c;建议使用 GUID 或应用专…...

Python Cookbook-6.8 避免属性读写的冗余代码

任务 你的类会用到某些 property 实例&#xff0c;而 getter 或者 setter 都是一些千篇一律的获取或者设置实例属性的代码。你希望只用指定属性名&#xff0c;而不用写那些非常相似的代码。 解决方案 需要一个工厂函数&#xff0c;用它来处理那些 getter 或 setter 的参数是…...

热带气旋【CH报文数据插值】中央气象台-台风路径数据每小时插值

对CH报文数据进行每小时插值 原始数据文件 数据 三小时一次的报文数据 需求 按小时补齐热带气旋路径信息 插值后数据效果如下&#xff1a; 插值代码 # 对ch文件插值import pandas as pd import datetime import osdef interpolate_ch_one_hour (file_name):new_file_name…...

06-stm32时钟体系

一、时钟体系 1、概念 1.时钟信号&#xff1a;是一种周期性的电信号&#xff0c;例如为方波&#xff0c;正弦波&#xff0c;余弦波等各种波形&#xff0c;用于同步数字电路中的各种操作&#xff0c;它控制着数据的传输以及电路状态的变化。 2、时钟系统在 STM32 的系统中扮演…...

Hbase集群管理与实践

一、HBase集群搭建实战 1.1 环境规划建议 硬件配置基准&#xff08;以10节点集群为例&#xff09;&#xff1a; 角色CPU内存磁盘网络HMaster4核16GBSSD 200GB&#xff08;系统盘&#xff09;10GbpsRegionServer16核64GB124TB HDD&#xff08;JBOD&#xff09;25GbpsZooKeepe…...

基于大模型对先天性巨结肠全流程预测及医疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型在先天性巨结肠预测中的理论基础 2.1 大模型概述 2.2 大模型预测先天性巨结肠的可行性分析 三、术前预测与准备方案 3.1 大模型对术前病情的预测 3.1.1 疾病确诊预测 3.1.2 病情严重程度评估 3.2 …...

计算机组成原理-408考点-数的表示

常见题型&#xff1a;C语言中的有符号数和无符号数的表示。 【例】有如下C语言程序段: short si-32767&#xff1b;unsigned short usisi&#xff1b;执行上述两条语句后&#xff0c;usi的值为___。short和unsigned short均使用16位二进制数表示。 【分析】考点&#xff1a;同…...

vue滑块组件设计与实现

vue滑块组件设计与实现 设计一个滑块组件的思想主要包括以下几个方面&#xff1a;用户交互、状态管理、样式设计和事件处理。以下是详细的设计思想&#xff1a; 1. 用户交互 滑块组件的核心是用户能够通过拖动滑块来选择一个值。因此&#xff0c;设计时需要考虑以下几点&…...

Linux阻塞与非阻塞I/O:从原理到实践详解

Linux阻塞与非阻塞I/O&#xff1a;从原理到实践详解 1. 阻塞与非阻塞I/O基础概念 1.1 阻塞与非阻塞简介 在Linux系统编程中&#xff0c;I/O操作可以分为两种基本模式&#xff1a;阻塞I/O和非阻塞I/O。这两种模式决定了当设备或资源不可用时&#xff0c;程序的行为方式。 阻…...

form表单提交前设置请求头request header及文件下载

需求&#xff1a;想要在form表单submit之前&#xff0c;设置一下请求头。 除了用Ajax发起请求之外&#xff0c;还可以使用FormData来实现&#xff0c;咱不懂就问。 1 问&#xff1a;FormData什么时间出现的&#xff1f;与ajax什么联系&#xff1f; 2 问&#xff1a;FormData使…...

整合 CountVectorizer 和 TfidfVectorizer 绘制词云图

本文分别整合 CountVectorizer 和 TfidfVectorizer 绘制词云图 ✨ CountVectorizer CountVectorizer 是 scikit-learn 中用于 文本特征提取 的一个工具&#xff0c;它的主要作用是将一组文本&#xff08;文本集合&#xff09;转换为词频向量&#xff08;Bag-of-Words&#xf…...

国产AI大模型超深度横评:技术参数全解、商业落地全场景拆解

评测方法论与指标体系 评测框架设计 采用三层评估体系&#xff0c;涵盖技术性能、商业价值、社会效益三大维度&#xff0c;细分为12个二级指标、36个三级指标&#xff1a; 测试环境配置 项目配置详情硬件平台8NVIDIA H100集群&#xff0c;NVLink全互联&#xff0c;3TB内存软…...

Shell脚本-流程控制语句应用案例

在Shell脚本编程中&#xff0c;流程控制语句是实现逻辑控制和自动化任务处理的关键。通过合理运用条件判断、循环等流程控制语句&#xff0c;可以编写出高效、灵活的脚本程序。本文将通过几个实际的应用案例来展示如何使用这些流程控制语句解决具体的编程问题。 案例一&#x…...

HarmonyOS NEXT应用开发-Notification Kit(用户通知服务)notificationManager.addSlot

1.notificationManager.addSlot 支持设备Phone2in1TabletCarWearable addSlot(type: SlotType, callback: AsyncCallback<void>): void 创建指定类型的通知渠道。使用callback异步回调。 系统能力&#xff1a;SystemCapability.Notification.Notification 示例&#xf…...

计算机网络核心知识点全解析(面试通关版)

一、网络体系结构&#xff1a;从OSI到TCP/IP的分层设计 1.1 七层模型与四层模型对比 OSI七层模型核心功能TCP/IP四层对应典型协议生活类比应用层为应用程序提供服务&#xff08;如文件传输、邮件、Web浏览&#xff09;应用层HTTP、FTP、SMTP、DNS快递面单信息&#xff08;收件…...

表示学习与部分域适应

表示学习&#xff08;Representation Learning&#xff09; 表示学习是机器学习的一个分支&#xff0c;旨在自动从原始数据中提取有意义的特征或表示&#xff0c;使得这些表示更适合后续任务&#xff08;如分类、检测、回归等&#xff09;。其核心思想是将高维、复杂、冗余的原…...

AI与思维模型【77】——PDCA思维模型

一、定义 PDCA思维模型是一种用于持续改进和优化工作流程、项目实施以及问题解决的科学管理方法。它由四个英文字母组成&#xff0c;分别代表计划&#xff08;Plan&#xff09;、执行&#xff08;Do&#xff09;、检查&#xff08;Check&#xff09;和处理&#xff08;Act&…...

Flink 系列之七 - Data Stream API的源算子原理

之前做过数据平台&#xff0c;对于实时数据采集&#xff0c;使用了Flink。现在想想&#xff0c;在数据开发平台中&#xff0c;Flink的身影几乎无处不在&#xff0c;由于之前是边用边学&#xff0c;总体有点混乱&#xff0c;借此空隙&#xff0c;整理一下Flink的内容&#xff0c…...

使用 SSE + WebFlux 推送日志信息到前端

为什么使用 SSE 而不使用 WebSocket, 请看 SEE 对比 Websocket 的优缺点。 特性SSEWebSocket通信方向单向&#xff08;服务器→客户端&#xff09;双向&#xff08;全双工&#xff09;协议基于 HTTP独立协议&#xff08;需 ws:// 前缀&#xff09;兼容性现代浏览器&#xff08…...

Java多线程同步有哪些方法?

大家好&#xff0c;我是锋哥。今天分享关于【Java多线程同步有哪些方法?】面试题。希望对大家有帮助&#xff1b; Java多线程同步有哪些方法? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Java 中&#xff0c;多线程同步是确保多个线程在访问共享资源时不会…...

Java—数 组

数组就是一个容器&#xff0c;用来存一批同种类型的数据。 一、静态初始化数组 1.1 定义方式 语法&#xff1a; 完整格式&#xff1a;数据类型 [ ] 数组名 new 数据类型 []{ 元素 1 &#xff0c;元素 2 &#xff0c;元素3… };简化格式&#xff1a;数据类型 [ ] 数组名 {…...

iOS/Android 使用 C++ 跨平台模块时的内存与生命周期管理

在移动应用开发领域,跨平台开发已经成为一种不可忽视的趋势。随着智能手机市场的持续扩张,开发者需要同时满足iOS和Android两大主流平台的需求,而这往往意味着重复的工作量和高昂的维护成本。跨平台开发的目标在于通过一套代码库实现多平台的支持,从而降低开发成本、加速产…...

为什么vue的key值,不用index?

在 Vue 中&#xff0c;key 的作用是帮助框架高效地识别和复用 DOM 节点或组件实例。使用数组索引 (index) 作为 key 值可能会导致以下问题&#xff0c;因此通常不建议这样做&#xff1a; 1. 列表数据变化时&#xff0c;可能导致错误的 DOM 复用 问题&#xff1a;当列表的顺序…...

Hi3516CV608 超高清智慧视觉 SoC 芯片 可提供开发资料

Hi3516CV608 超高清智慧视觉SoC 产品简介 总体介绍 Hi3516CV608是一颗面向消费类市场的IPC SoC&#xff0c;在新一代视频编解码标准、网络安全、隐私保护和人工智能方面引领行业发展。主要应用于室内外场景下的云台机、枪机、球机、枪球一体机、双目长短焦机等产品形态&#…...

Flink部署与应用——部署方式介绍

引入 我们通过Flink相关论文的介绍&#xff0c;对于Flink已经有了初步理解&#xff0c;这里简单的梳理一下Flink常见的部署方式。 Flink 的部署方式 StandAlone模式 介绍 StandAlone模式是Flink框架自带的分布式部署模式&#xff0c;不依赖其他的资源调度框架&#xff0c…...

数据挖掘技术与应用课程论文——数据挖掘中的聚类分析方法及其应用研究

数据挖掘中的聚类分析方法及其应用研究 摘要 聚类分析是数据挖掘技术中的一个重要组成部分,它通过将数据集中的对象划分为多个组或簇,使得同一簇内的对象具有较高的相似性,而不同簇之间的对象具有较低的相似性。 本文系统地研究了数据挖掘中的多种聚类分析方法及其应用。首先…...

SIEMENS PLC程序解读 ST 语言 车型识别

1、ST程序代码 IF #Type1_MIX < #CFG_Type.Type.CT AND #CFG_Type.Type.CT < #Type1_MAX AND #CFG_Type.Type.CT<>0 THEN#Type[1] : 1;FOR #I : 0 TO 39 DOIF #CFG_Type.Type.CT/10 (#Type1_MIX 10 * #I)/10 THEN#Sub_Type."1"[#I 1] : 1;END_IF; E…...

神经网络基础[损失函数,bp算法,梯度下降算法 ]

关于神经网络的基础的概念可以看我前面的文章 损失函数 在深度学习中, 损失函数是用来衡量模型参数的质量的函数, 衡量的方式是比较网络输出和真实输出的差异 作用:指导模型的训练过程&#xff0c;通过反向传播算法计算梯度&#xff0c;从而更新网络的参数&#xff0c;最终使…...

python打印颜色(python颜色、python print颜色、python打印彩色文字、python print彩色、python彩色文字)

文章目录 python怎么打印彩色文字1. 使用ANSI转义码&#xff1a;2. 使用colorama库&#xff08;更好的跨平台支持&#xff09;&#xff1a;3. 使用termcolor库&#xff1a; python怎么打印彩色文字 在Python中打印彩色文字有几种方法&#xff1a; 1. 使用ANSI转义码&#xff…...

数字域残留频偏的补偿原理

模拟域的频谱搬移一般通过混频器实现。一般情况下模拟域调整完频偏后数字域还会存在一部分残留频偏这部分就需要在数字域补偿。原理比较简单本文进行下粗略总结。首先我们需要了解下采样具体可参考下信号与系统笔记(六)&#xff1a;采样 - 知乎。 采样前和采样后&#xff0c;角…...

Linux文件管理2

Linux 文件管理是系统操作的核心内容之一&#xff0c;涉及文件和目录的创建、删除、移动、查看、权限管理等操作。以下是 Linux 文件管理的核心知识点和常用操作总结&#xff1a; 一、文件系统结构 Linux 文件系统采用 树形结构&#xff0c;以 /&#xff08;根目录&#xff0…...

C++----模拟实现string

模拟实现string&#xff0c;首先我们要知道成员变量有哪些&#xff1a; class _string{private:char* _str;size_t capacity;//空间有多大size_t size;//有效字符多少const static size_t npos;};const size_t _string::npos-1;//static在外面定义不需要带static&#xff0c;np…...

Python torch.optim.lr_scheduler 常用学习率调度器使用方法

在看学习率调度器之前&#xff0c;我们先看一下学习率的相关知识&#xff1a; 学习率 学习率的定义 学习率&#xff08;Learning Rate&#xff09;是深度学习中一个关键的超参数&#xff0c;它决定了在优化算法&#xff08;如梯度下降法&#xff09;更新模型参数时&#xff0…...

从零开始学Python游戏编程39-碰撞处理1

在《从零开始学Python游戏编程38-精灵5》代码的基础上&#xff0c;添加两个敌人的防御塔&#xff0c;玩家的坦克无法移动到防御塔所在的空格中&#xff0c;如图1所示。 图1 游戏中的碰撞处理 1 游戏中空格的坐标 在《从零开始学Python游戏编程36-精灵3》中提到&#xff0c;可…...

同步定时器的用户数要和线程组保持一致,否则jmeter会出现接口不执行’stop‘和‘×’的情况

调试压测时发现了一个问题就是线程计划总是出现‘stop’的按钮无法执行完毕 发现时同步定时器导致的&#xff0c;就是有接口使用了同步定时器&#xff0c;但是这个同步定时器的用户数量设置的&#xff1c;线程组用户数量时&#xff0c;会出现执行无法结束的情况&#xff0c;如下…...

如何在Linux用libevent写一个聊天服务器

废话少说&#xff0c;先看看思路 因为libevent的回调机制&#xff0c;我们可以借助这个机制来创建bufferevent来实现用户和用户进行通信 如果成功连接后我们可以直接在listener回调函数里创建一个bufferevent缓冲区&#xff0c;并为每个缓冲区设置相应的读回调和事件回调&…...

Virtuoso ADE采用Spectre仿真中出现MOS管最小长宽比满足要求依然报错的情况解决方法

在ADE仿真中错误问题如下&#xff1a; ERROR (CMI-2440): "xxx.scs" 46338: I2.M1: The length, width, or area of the instance does not fit the given lmax-lmin, wmax-wmin, or areamax-areamin range for any model in the I2.M3.nch_hvt group. The channel w…...

防火墙原理与应用总结

防火墙介绍&#xff1a; 防火墙&#xff08;Firewall&#xff09;是一种网络安全设备&#xff0c;其核心目标是通过分析数据包的源地址、端口、协议等内容&#xff0c;保护一个网络区域免受来自另一个网络区域的网络攻击和网络入侵行为&#xff0c;同时允许合法流量自由通行。…...

Graph Database Self-Managed Neo4j 知识图谱存储实践2:通过官方新手例子入门(未完成)

官方入门例子&#xff1a;neo4j-graph-examples/get-started: An introduction to graph databases and Neo4j for new users 官方例子仓库&#xff1a;https://github.com/neo4j-graph-examples 下载数据 git clone https://github.com/neo4j-graph-examples/get-started …...

GIT下载步骤

git官方链接&#xff1a; 添加链接描述...

C++中的vector和list的区别与适用场景

区别 特性vectorlist底层实现动态数组双向链表内存分配连续内存块非连续内存块随机访问支持&#xff0c;通过索引访问&#xff0c;时间复杂度O(1)不支持&#xff0c;需遍历&#xff0c;时间复杂度O(n)插入/删除末尾操作效率高&#xff0c;时间复杂度O(1)任意位置操作效率高&am…...

软件测试入门学习笔记

今天学习新知识&#xff0c;软件测试。 什么是软件测试&#xff1f; 使用人工和自动手段来运行或测试某个系统的过程&#xff0c;目的在于检验它是否满足规定的需求或弄清实际结果与预期结果之间的差别。 软件测试的目的&#xff1f; 1&#xff09;为了发现程序&#xff0…...

2025年深度学习模型发展全景透视(基于前沿技术突破与开源生态演进的交叉分析)

2025年深度学习模型发展全景透视 &#xff08;基于前沿技术突破与开源生态演进的交叉分析&#xff09; 一、技术突破与能力边界拓展 智能水平跃升 2025年开源模型如Meta Llama-4、阿里Qwen2.5-VL参数规模突破1300亿&#xff0c;在常识推理能力测试中首次超越人类基准线7.2%谷歌…...