爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      【ceph】AsyncMessenger模块源码分析01 资源创建

      首页 知识中心 软件开发 文章详情页

      【ceph】AsyncMessenger模块源码分析01 资源创建

      2025-02-25 08:57:14 阅读次数:9

      gt,实例,线程

      作为分布式存储系统,Msg(src/msg)模块可谓是Ceph的基石之一。Ceph发展到Luminous ,已经支持的3大通信机制:simple,async和xio,其中simple历史最为悠久,是Ceph最早的通信模块,原理简单但性能较差(多线程模型,对于较大的集群,会产生很多线程,对主机的要求也比较高。)。async作为后起之秀,优良的性能使其自Luminous开始已经作为了缺省msg方案。xio拥有众多实验特性,目前距离生产环境还有很大距离。

      在使用OOP设计一个通信模块时,往往少不了以下几个抽象:

      • Messenger 用于在最高层次管理所有通信,通常包括通信策略,工作线程等等
      • Connection表示对一个连接的抽象,经常会设计一个状态机来供上层管理该Connection
      • Message是对消息的封装,通常包含’Header + Data + Checking’ 几部分,Message和报文流的常常需要转换方法,Message->buf:encode(),Message<-buf:decode()
      • Stack 负责实现真实的通信,比如TCP/IP协议栈、RDMA协议栈

      以此为基础,Ceph Msg框架就显得十分清晰,下面就是Async机制核心的封装:AsyncMessenger,Processor,AsyncConnection,NetworkStack,Worker,EventCenter,Message,本文将逐个讨论这些角色。

      【ceph】AsyncMessenger模块源码分析01 资源创建

      上图是Ceph Msg模块框图,可以看出,msg模块可以分为3个层次:

      层次 内容
      1 async/simple/xio
      2 Generic NetworkStack(通用)
      3 Specific NetworkStack(特定)

      上层将”通信机制”抽象出来,下层聚焦于协议栈,包括硬件无关的部分以及硬件相关的部分,比如RDMAStack针对配置了IB卡的存储节点,DPDKStack用于使用X86 DPDK技术的存储节点,而PosixStack则是Linux原生的Socket通信接口。

      AsyncMessenger

      AsynMessenger类继承自Messenger:

      class  AsyncMessenger:public SimplePolicyMessenger
      
      class  SimplePolicyMessenger:public Messenger

      SimplePolicyMessenger是和”连接策略”相关的类。AsyncMessenger作为整个通信模块的核心和中转,不论是作为底层通信的NetworkStack,还是作为连接的抽象的Connection,抑或处理对端链接请求的Processor,都要围着它转。以OSD进程的main函数为例(src/ceph_),整个OSD进程也不过7个Messenger实例:

      ms_public,

      ms_cluster,

      ms_hb_back_client,

      ms_hb_front_client,

      ms_hb_back_server,

      ms_hb_front_server,

      ms_objecter,

      这7个Messenger分别用来处理不同类型的消息。

      //src/msg/async/AsyncMessenger.h
       75 class AsyncMessenger : public SimplePolicyMessenger {
      139   int send_message(Message *m, const entity_inst_t& dest) override {}
      176   void ready() override; //启动Processor和dispatch_queue线程
      197   AsyncConnectionRef create_connect(const entity_addr_t& addr, int type);
      221   NetworkStack *stack;
      222   std::vector<Processor*> processors;
      223   friend class Processor;
      224   DispatchQueue dispatch_queue;
      273   ceph::unordered_map<entity_addr_t, AsyncConnectionRef> conns;
      280   set<AsyncConnectionRef> accepting_conns;
      343   AsyncConnectionRef lookup_conn(const entity_addr_t& k) {
      346   }
      348   int accept_conn(AsyncConnectionRef conn) {
      368   }
      371   void add_accept(Worker *w, ConnectedSocket cli_socket, entity_addr_t &addr);
      448 } ;
      //src/msg/async/AsyncMessenger.h
      class AsyncMessenger : public SimplePolicyMessenger
      {
          //提供给上层提交发送请求的接口,AsyncMessenger::send_message()
          int send_message(Message *m, const entity_inst_t &dest) override
          {
          }
          //启动Processor和dispatch_queue线程
          void ready() override;
          //创建Connection实例的接口
          AsyncConnectionRef create_connect(const entity_addr_t &addr, int type);//
          //Messenger关联的Network实例,收发流程都要经过该实例的传递
          NetworkStack *stack;
          std::vector<Processor *> processors;
          friend class Processor;
          //向上层提交收到的Message的队列
          DispatchQueue dispatch_queue;
          //管理Connection实例的数据结构,所有已经成功建立起来的Connection都可以在这里找到
          ceph::unordered_map<entity_addr_t, AsyncConnectionRef> conns;
          //对于Connection建立过程中的Server端,accept返回但还在协商阶段的Connection被放置于此,连接建立成功后将从这里移到conns中
          set<AsyncConnectionRef> accepting_conns;
          //根据地址在conns中查找对应的Connection实例
          AsyncConnectionRef lookup_conn(const entity_addr_t &k)
          {
          }
          //将链接从accepting_conns中删除,并添加到conns中
          int accept_conn(AsyncConnectionRef conn)
          {
          }
          //被Processor::accept()调用,Server端一旦侦听到Client端的链接,就会在Server端建立一个Connection实例,并将其加入到accepting_conns中以待后续处理,这个建立和加入的过程就是在该函数中完成的。
          void add_accept(Worker *w, ConnectedSocket cli_socket, entity_addr_t &addr);
      } ;
      

      –139–>提供给上层提交发送请求的接口,AsyncMessenger::send_message()–>AsyncMessenger::_send_message()–>AsyncMessenger::submit_message()–>AsyncConnection::send_message()

      –176–>启动Processor和dispatch_queue线程
      –197–>创建Connection实例的接口
      –221–>Messenger关联的Network实例,收发流程都要经过该实例的传递
      –224–>向上层提交收到的Message的队列
      –273–>管理Connection实例的数据结构,所有已经成功建立起来的Connection都可以在这里找到
      –280–>对于Connection建立过程中的Server端,accept返回但还在协商阶段的Connection被放置于此,连接建立成功后将从这里移到conns中
      –343–>根据地址在conns中查找对应的Connection实例
      –348–>将链接从accepting_conns中删除,并添加到conns中
      –371–>被Processor::accept()调用,Server端一旦侦听到Client端的链接,就会在Server端建立一个Connection实例,并将其加入到accepting_conns中以待后续处理,这个建立和加入的过程就是在该函数中完成的。

      AsyncMessenger::AsyncMessenger()

      //src/msg/async/
      245 AsyncMessenger::AsyncMessenger(CephContext *cct, entity_name_t name, const std::string &type, string mname, uint64_t _nonce)
      253 {
      254   std::string transport_type = "posix";
      255   if (type.find("rdma") != std::string::npos)
      256     transport_type = "rdma";
      257   else if (type.find("dpdk") != std::string::npos)
      258     transport_type = "dpdk";
      259 
      260   ceph_spin_init(&global_seq_lock);
      261   StackSingleton *single;
      262   cct->lookup_or_create_singleton_object<StackSingleton>(single, "AsyncMessenger::NetworkStack::"+tr
      263   single->ready(transport_type);
      264   stack = single->stack.get();   //返回单例的this
      265   stack->start();
      266   local_worker = stack->get_worker();
      267   local_connection = new AsyncConnection(cct, this, &dispatch_queue, local_worker);
      268   init_local_connection();
      269   reap_handler = new C_handle_reap(this);
      270   unsigned processor_num = 1;
      271   if (stack->support_local_listen_table())
      272     processor_num = stack->get_num_worker();
      273   for (unsigned i = 0; i < processor_num; ++i)
      274     processors.push_back(new Processor(this, stack->get_worker(i), cct));
      275 }

      –254-258  –>协议栈默认是Posix,根据ceph.conf中指定的,可以为rdma或dpdk
      –261-262  –>使用单例模式single(用于构造NetworkStack对象),所以在一个Ceph进程(MON/MDS/OSD/Client)中,一个类型的协议栈有且只有一个实例
      –263         –>利用单例single构造NetworkStack对象,实质是调用"NetworkStack::create(cct,type)",后者会根据type的不同来初始化不同的子类,比如RDMAStack,PosixStack或DPDKStack。在NetworkStack实例被构造的同时,还会构造一组Worker供关联于它的AsyncMessenger使用,类似的,这组Worker也会根据ceph.conf而被实例化出不同的子类实例,比如RDMAWorker。这组worker使用"AsyncMessenger->NetworkStack::vector<Worker*>workers"管理。
      –264        –>将构造好的NetworkStack与AsyncMessenger关联,一个进程内可以有多个Messenger实例(参见ceph_),但如果只有一种类型的网络,eg,public/cluster均为Posix,则该进程内只有一个NetworkStack实例
      –265        –>”启动”协议栈,其主要工作就是针对每一个workers[i]启动一个线程,这个线程的核心任务就是循环执行"Worker.EventCenter.process_events()",相关的资源都被封装在Worker及其子类中。
      –266        –>get_worker()会根据Work Load获取当前Worker中的负载最轻的线程
      –271-274 –>构造一组(个)Processor实例,和Worker类似,每个Processor实例都是对一个线程运行资源的封装,在"Processor::start()"中(not here)启动这些线程。使用"AsyncMessenger::vector<Processor*>processors"管理。

      Processor

      Processor的主要工作是”监视”,类似于Socket编程中的listen,Async机制会启动一组Processor线程,每个线程”监视”一个端口,一旦有链接建立,即构造一个AsynConnection实例并交由该Processor线程对应的Worker线程处理。这里插句题外话,Processor线程和Worker线程是”多对一”的关系,一个Worker线程不但处理Processor发给它的任务,还可能会有一堆AsyncConnection发给它的任务。在Ceph中,进程之间(eg, OSD-OSD)没有C/S之分,但两个进程之间有很多的Connection,对于每个Connection确是有C/S之分的。在没有链接的情况下,主动建立链接的为Client,被动接受链接的为Server,而Processor就是那个使一个进程可以像Server一样被动建立链接的前提。

      //ceph-12.0.0\src\msg\async\AsyncMessenger.h
      47 class Processor {
       48   AsyncMessenger *msgr;
       49   NetHandler net;
       50   Worker *worker;
       51   ServerSocket listen_socket;
       52   EventCallbackRef listen_handler;
       54   class C_processor_accept;
       57   Processor(AsyncMessenger *r, Worker *w, CephContext *c);
       60   void stop();
       61   int bind(const entity_addr_t &bind_addr,
       62            const set<int>& avoid_ports,
       63            entity_addr_t* bound_addr);
       64   void start();
       65   void accept();
       66 };

      –48–>隶属的AsyncMessenger实例(父AsyncMessenger)
      –49–>Processor建立连接的底层是使用Socket的listen-accept机制,这些机制被封装在了NetHandler中
      –50–>Processor关联的Worker线程,Processor和Connection一样,所有Event最后都提交给关联的Worker处理
      –51–>监听socket,本质是对Specific Stack层中的Server端Socket进行封装,比如RDMAServerScoketImpl::server_setup_socket(listen_socket.fd())
      –52–>实质是C_processor_accept实例,作为listen_socket.fd()的handler被注册到Msg中的file events中,当Client端有连接过来时,该fd()会变得可读,此时就会回调该listen_handler,本质是调用Processor.accept()–>AsyncMessenger.add_accept()–>AsyncConnection.accept()来建立一个可用连接。
      –61–>绑定一个地址作为listen_socket。

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

      =================================================================================================

       

       

      当前的版本(mimic,v13)默认的messenger框架是AsyncMessenger,下面以OSD的ms_public来介绍AsyncMessenger网络模块。

       messenger = Messenger::create(g_ceph_context, g_conf->ms_type,
                        entity_name_t::MON(-1),
                        "simple_server",
                        0 /* nonce */);

       工厂模式,在create函数中会根据g_conf->ms_type来选择创建不同类型的Messenger,Mimic默认为"async+posix",因此会创建AsyncMessenger,返回如下:
      return new AsyncMessenger(cct, name, type, std::move(lname), nonce);

       

      ceph-12.0.0\src\test\msgr\perf_msgr_中的通信初始化流程

      int main(int argc, char **argv)

      {

      ……

        auto cct = global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT,
                   CODE_ENVIRONMENT_UTILITY, 0);
        common_init_finish(g_ceph_context);
        g_ceph_context->_conf->apply_changes(NULL);

      ……

        MessengerServer server(g_ceph_context->_conf->ms_type, args[0], worker_threads, think_time);
        server.start();

        return 0;
      }

       

      在这个例子中,相比于前面讲的 src\test\messenger\simple_server.c里的实例,本例子中Messenger被封装在MessengerServer类中,是MessengerServer的成员

      class MessengerServer {
        Messenger *msgr;
        string type;
        string bindaddr;
        ServerDispatcher dispatcher;
      
       public:
        MessengerServer(string t, string addr, int threads, int delay):
            msgr(NULL), type(t), bindaddr(addr), dispatcher(threads, delay) {
          msgr = Messenger::create(g_ceph_context, type, entity_name_t::OSD(0), "server", 0, 0);
          msgr->set_default_policy(Messenger::Policy::stateless_server(0, 0));
        }

       MessengerServer参数实例化时,类内部创建一个  msgr = Messenger::create(g_ceph_context, type, entity_name_t::OSD(0), "server", 0, 0);

      class MessengerServer {
        Messenger *msgr;
        string type;
        string bindaddr;
        ServerDispatcher dispatcher;
      
       public:
        MessengerServer(string t, string addr, int threads, int delay):
            msgr(NULL), type(t), bindaddr(addr), dispatcher(threads, delay) {
          msgr = Messenger::create(g_ceph_context, type, entity_name_t::OSD(0), "server", 0, 0);
          msgr->set_default_policy(Messenger::Policy::stateless_server(0, 0));
        }
        ~MessengerServer() {
          msgr->shutdown();
          msgr->wait();
        }
        void start() {
          entity_addr_t addr;
          addr.parse(bindaddr.c_str());
          msgr->bind(addr);
          msgr->add_dispatcher_head(&dispatcher);
          msgr->start();
          msgr->wait();
        }
      };

      然后server.start(); 完成了和src\test\messenger\simple_server.c里的实例一样的messenger->start();和messenger->wait();

      上面的代码是典型的服务端的启动流程:

      1. 绑定服务端地址 msgr->bind(addr)
      2. 添加消息分发类型 dispatcher
      3. 启动 msgr->start()

      和src\test\messenger\simple_server.c里的实例同样的流程

      
      messenger = Messenger::create();
       
      r = messenger->bind(bind_addr);
       
      dispatcher = new SimpleDispatcher(messenger);
       
      messenger->add_dispatcher_head(dispatcher);  //messager被观察对象 将 dispatcher观察者注册到最近的队列中
       
      messenger->start();
       
      messenger->wait(); // can't be called until ready()
      

       下面从内部具体如何实现。

      • 调用processor的bind 函数,对于PosixStack, 只需要一个porcessor就可以了。
      int AsyncMessenger::bind(const entity_addr_t &bind_addr)
      {
       ......
           for (auto &&p : processors) {
               int r = p->bind(bind_addr, avoid_ports, &bound_addr);
             }
       ......
      }
      int Processor::bind(const entity_addr_t &bind_addr,
                  const set<int>& avoid_ports,
                  entity_addr_t* bound_addr)
      {
      ...
        //向Processor对应的worker线程 投递外部事件,其回调函数为 worker的 listen函数
         worker->center.submit_to(worker->center.get_id(), [this, &listen_addr, &opts, &r]() {
              r = worker->listen(listen_addr, opts, &listen_socket);
            }, false);
      ...
      }
       

       

      原文:ceph Async 网络通信源代码分析(二)_changtao381的专栏-CSDN博客

      【ceph】AsyncMessenger模块源码分析01 资源创建

       

      1. Async模块
      1. Async工作原理

      【ceph】AsyncMessenger模块源码分析01 资源创建

      1. Async主要组件

      AsyncMessenger

      管理网络连接

      AsyncConnection

      网路通信连接,定义网络通信应用层协议

      NetworkStack

      管理Worker对象及其对应地线程

      Worker

      网络I/O流处理单元,每个Worker对应一个工作线程

      ServerSocket/ServerSocketImpl

      C/S模式监听套接字,向上屏蔽了各种不同的网络编程接口

      ConnectedSocket/ConnectedSocketImpl

      C/S模式连接套接字,向上屏蔽了各种不同的网络编程接口

      EventCenter

      事件分发器,负责事件注册、事件分发

      EventCallback

      当对应的事件发生时,由EventCenter负责回调

      EventEpoll

      对epoll进行封装,轮询网络I/O事件

      【ceph】AsyncMessenger模块源码分析01 资源创建

       

      【ceph】AsyncMessenger模块源码分析01 资源创建

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.csdn.net/bandaoyu/article/details/111870052,作者:bandaoyu,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:322. 零钱兑换,344. 反转字符串,347. 前 K 个高频元素

      下一篇:使用ant执行Java代码

      相关文章

      2025-05-16 09:15:17

      Linux系统基础-多线程超详细讲解(5)_单例模式与线程池

      Linux系统基础-多线程超详细讲解(5)_单例模式与线程池

      2025-05-16 09:15:17
      单例 , 线程 , 队列
      2025-05-16 09:15:10

      52.介绍AOP有几种实现方式

      52.介绍AOP有几种实现方式

      2025-05-16 09:15:10
      gt , lt , Spring
      2025-05-14 10:33:16

      30天拿下Rust之泛型

      在Rust语言中,泛型是一种强大的工具,它允许我们编写可复用且灵活的代码。通过泛型,我们可以创建适用于多种类型的数据结构和函数,而无需为每种类型都重复编写相同的逻辑。在Rust中,泛型通过指定类型参数来实现,这些类型参数会在编译时被具体类型所替换。

      2025-05-14 10:33:16
      Rust , 参数 , 实例 , 泛型 , 示例 , 类型
      2025-05-14 10:07:38

      超级好用的C++实用库之互斥锁

      互斥锁是一种用于多线程编程的同步机制,其主要目的是确保在并发执行环境中,同一时间内只有一个线程能够访问和修改共享资源。

      2025-05-14 10:07:38
      CHP , Lock , 互斥 , 线程 , 释放 , 锁定
      2025-05-14 10:03:13

      超级好用的C++实用库之线程基类

      在C++中,线程是操作系统能够进行运算调度的最小单位。一个进程可以包含多个线程,这些线程共享进程的资源,比如:内存空间和系统资源,但它们有自己的指令指针、堆栈和局部变量等。

      2025-05-14 10:03:13
      Linux , void , Windows , 函数 , 操作系统 , 线程
      2025-05-14 10:02:58

      30天拿下Rust之结构体

      在Rust语言中,结构体是一种用户自定义的数据类型,它允许你将多个相关的值组合成一个单一的类型。结构体是一种复合数据类型,可以用来封装多个不同类型的字段,这些字段可以是基本数据类型、其他结构体、枚举类型等。通过使用结构体,你可以创建更复杂的数据结构,并定义它们的行为。

      2025-05-14 10:02:58
      Rust , 使用 , 字段 , 实例 , 方法 , 示例 , 结构
      2025-05-14 10:02:48

      互斥锁解决redis缓存击穿

      在高并发系统中,Redis 缓存是一种常见的性能优化方式。然而,缓存击穿问题也伴随着高并发访问而来。

      2025-05-14 10:02:48
      Redis , 互斥 , 数据库 , 线程 , 缓存 , 请求
      2025-05-14 09:51:15

      python json反序列化为对象

      在Python中,将JSON数据反序列化为对象通常意味着将JSON格式的字符串转换为一个Python的数据结构(如列表、字典)或者一个自定义的类实例。

      2025-05-14 09:51:15
      json , JSON , Person , Python , 列表 , 字典 , 实例
      2025-05-14 09:51:15

      java怎么对线程池做监控

      对Java线程池进行监控是确保系统性能和稳定性的重要部分。监控线程池可以帮助我们了解线程池的状态,如当前活跃线程数、任务队列长度、已完成任务数等。

      2025-05-14 09:51:15
      Java , 方法 , 监控 , 示例 , 线程 , 队列
      2025-05-13 09:53:23

      Java静态变量在静态方法内部无法改变值

      在Java中,静态变量(也称为类变量)属于类本身,而不是类的任何特定实例。它们可以在没有创建类的实例的情况下访问和修改。如果我们发现在静态方法内部无法改变静态变量的值,这通常是因为我们的代码中有一些逻辑错误或误解。

      2025-05-13 09:53:23
      Java , 变量 , 实例 , 类名 , 访问 , 静态 , 静态方法
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5226889

      查看更多

      最新文章

      Linux系统基础-多线程超详细讲解(5)_单例模式与线程池

      2025-05-16 09:15:17

      52.介绍AOP有几种实现方式

      2025-05-16 09:15:10

      超级好用的C++实用库之互斥锁

      2025-05-14 10:07:38

      超级好用的C++实用库之线程基类

      2025-05-14 10:03:13

      互斥锁解决redis缓存击穿

      2025-05-14 10:02:48

      java怎么对线程池做监控

      2025-05-14 09:51:15

      查看更多

      热门文章

      Java线程同步synchronized wait notifyAll

      2023-04-18 14:15:05

      操作系统中的线程种类

      2023-04-24 11:27:18

      Android Priority Job Queue (Job Manager):线程任务的容错重启机制(二)

      2024-09-25 10:13:46

      Android Priority Job Queue (Job Manager):多重不同Job并发执行并在前台获得返回结果(四)

      2023-04-13 09:54:33

      实现远程线程DLL注入

      2023-05-04 08:57:15

      【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明

      2023-04-24 11:25:19

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      ArkTS线程中通过napi创建的C++线程

      Java中的静态关键字详解

      Kotlin 协程的suspend关键字到底有什么作用?进来看实验

      软件开发入门之Java 抽象类

      驱动开发:内核枚举驱动内线程(答疑篇)

      【揭秘】ExecutorService和ScheduledExecutorService区别?

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号