设计模式 Concurrency 之 ReadWriteLock 读写锁

WslRegisterDistribution failed with error_ 0x8007019e、0x800701bc、0x80370102 Ubuntu 20.04.4 LTS 报错解决方案。分别涉及到三个错误:WslRegisterDistribution failed with error: 0x8007019e、WslRegisterDistribution failed with error: 0x800701bc和WslRegisterDistribution failed with error: 0x80370102 阅读详情

1. 定义

  • 这种模式允许同步的读操作,但是写操作会加排他锁.
  • 意味着多线程可以进行读操作,但是修改数据的时候需要加排他锁
  • 当一个线程在写数据时,其他读或写线程会一直阻塞到当前线程完成写操作

2. 例子

这里写图片描述

ReadWriteLock

package com.hqq.concurrency.read_write_lock;

import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;

/**
 * ReaderWriterLock
 * 读写锁
 * 控制读写权限
 * 允许多个读操作持有锁 但是如果加了写锁 读操作便会阻塞
 * 如果加了读锁 写操作就会阻塞
 * 是非公平锁
 * Created by heqianqian on 2017/7/30.
 */
public class ReaderWriterLock implements ReadWriteLock {


    private Object readerMutex = new Object();

    private int currentReaderCount;

    private ReadLock readLock = new ReadLock();

    private WriteLock writeLock = new WriteLock();

    /**
     * 全局互斥变量 用来表示写操作和读操作是否同时获得锁
     * <p>
     * 1.如果包含{@link readLock},表示当前线程持有读锁,其他线程仍然可以进行读操作
     * 2.如果包含{@link writeLock},表示当前线程持有写锁,其他线程既无法执行写操作也无法执行读操作
     */
    private Set<Object> globalMutex = new HashSet<>();

    @Override
    public Lock readLock() {
        return this.readLock;
    }

    @Override
    public Lock writeLock() {
        return this.writeLock;
    }

    private boolean doesWriterHoldLock() {
        return globalMutex.contains(writeLock);
    }

    private boolean doesReaderHoldLock() {
        return globalMutex.contains(readLock);
    }


    private boolean isLockFree() {
        return globalMutex.isEmpty();
    }

    private static void waitUnInterruptly(Object o) {
        try {
            o.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    /**
     * 读锁
     */
    private class ReadLock implements Lock {

        @Override
        public void lock() {
            synchronized (readerMutex) {
                currentReaderCount++;//当前读操作数加1
                if (currentReaderCount == 1) {
                    //尝试为第一个读线程获得互斥锁
                    synchronized (globalMutex) {
                        while (true) {
                            //如果没有线程持有锁或者当前持有的是读锁
                            if (isLockFree() || doesReaderHoldLock()) {
                                globalMutex.add(this);
                                break;
                            } else {//否则阻塞等待
                                waitUnInterruptly(globalMutex);
                            }
                        }
                    }
                }
            }

        }

        @Override
        public void lockInterruptibly() throws InterruptedException {
            throw new UnsupportedOperationException();
        }

        @Override
        public boolean tryLock() {
            throw new UnsupportedOperationException();
        }

        @Override
        public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
            throw new UnsupportedOperationException();
        }

        @Override
        public void unlock() {
            synchronized (readerMutex) {
                //当前读线程数减1
                currentReaderCount--;
                //当读线程数为0[即完成所有读操作时 移除当前线程 唤醒其他等待线程]
                if (currentReaderCount == 0) {
                    synchronized (globalMutex) {
                        globalMutex.remove(this);
                        //唤醒等待者 一般是读锁
                        globalMutex.notifyAll();
                    }
                }
            }
        }

        @Override
        public Condition newCondition() {
            throw new UnsupportedOperationException();
        }
    }

    /**
     * 写锁
     */
    private class WriteLock implements Lock {

        @Override
        public void lock() {
            synchronized (globalMutex) {
                while (true) {
                    if (isLockFree()) {
                        globalMutex.add(this);
                        break;
                    } else if (doesWriterHoldLock()) {
                        waitUnInterruptly(globalMutex);
                    } else if (doesReaderHoldLock()) {
                        waitUnInterruptly(globalMutex);
                    } else {
                        throw new AssertionError("it should never reach here");
                    }
                }
            }
        }

        @Override
        public void lockInterruptibly() throws InterruptedException {
            throw new UnsupportedOperationException();
        }

        @Override
        public boolean tryLock() {
            throw new UnsupportedOperationException();
        }

        @Override
        public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
            throw new UnsupportedOperationException();
        }

        @Override
        public void unlock() {
            synchronized (globalMutex) {
                globalMutex.remove(this);
                globalMutex.notifyAll();
            }
        }

        @Override
        public Condition newCondition() {
            throw new UnsupportedOperationException();
        }
    }
}

Reader

package com.hqq.concurrency.read_write_lock;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.locks.Lock;

/**
 * Reader
 * Created by heqianqian on 2017/7/30.
 */
public class Reader extends Thread {

    private static final Logger LOGGER = LoggerFactory.getLogger(Reader.class);

    private String name;

    private Lock readLock;

    public Reader(String name, Lock readLock) {
        this.name = name;
        this.readLock = readLock;
    }

    @Override
    public void run() {
        readLock.lock();
        try {
            read();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            readLock.unlock();
        }
    }

    private void read() throws InterruptedException {
        LOGGER.info("{} read begin", name);
        Thread.sleep(500);
        LOGGER.info("{} read end", name);
    }
}

Writer

package com.hqq.concurrency.read_write_lock;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.locks.Lock;

/**
 * Writer
 * Created by heqianqian on 2017/7/30.
 */
public class Writer extends Thread {

    private static final Logger LOGGER = LoggerFactory.getLogger(Writer.class);

    private String name;

    private Lock writeLock;

    public Writer(String name, Lock writeLock) {
        this.name = name;
        this.writeLock = writeLock;
    }

    @Override
    public void run() {
        writeLock.lock();
        try {
            write();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            writeLock.unlock();
        }
    }

    public void write() throws InterruptedException {
        LOGGER.info("{} write begin", name);
        Thread.sleep(500);
        LOGGER.info("{} write end", name);
    }
}

APP

package com.hqq.concurrency.read_write_lock;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.stream.IntStream;

/**
 * ReadWriteLock读写锁
 * 在一个多线程的环境下,不管是读还是写操作会尝试去同步共享资源.
 * 这会导致低性能,特别在读多于写的情况下,因为读操作对另一个线程来说的线程安全的
 * <p>
 * 这种模式允许同步的读操作,但是写操作会加排他锁.
 * 意味着多线程可以进行读操作,但是修改数据的时候需要加排他锁
 * 当一个线程在写数据时,其他读或写线程会一直阻塞到当前线程完成写操作
 * Created by heqianqian on 2017/7/30.
 */
public class App {

    private static final Logger LOGGER = LoggerFactory.getLogger(App.class);

    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        ReaderWriterLock readerWriterLock = new ReaderWriterLock();

        //开启5个读线程
        IntStream.range(0, 5)
                .forEach(i -> executorService.submit(new Reader("Reader" + i, readerWriterLock.readLock())));

        //开启5个写线程
        IntStream.range(0, 5)
                .forEach(i -> executorService.submit(new Writer("Writer" + i, readerWriterLock.writeLock())));

        executorService.shutdown();

        try {
            executorService.awaitTermination(5, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            LOGGER.error("Error waiting for ExecutorService shutdown");
        }
    }

}

测试结果:

INFO  [2017-08-09 02:24:34,339] com.hqq.concurrency.read_write_lock.Reader: Reader2 read begin
INFO  [2017-08-09 02:24:34,336] com.hqq.concurrency.read_write_lock.Reader: Reader0 read begin
INFO  [2017-08-09 02:24:34,337] com.hqq.concurrency.read_write_lock.Reader: Reader1 read begin
INFO  [2017-08-09 02:24:34,352] com.hqq.concurrency.read_write_lock.Reader: Reader3 read begin
INFO  [2017-08-09 02:24:34,361] com.hqq.concurrency.read_write_lock.Reader: Reader4 read begin
INFO  [2017-08-09 02:24:34,849] com.hqq.concurrency.read_write_lock.Reader: Reader0 read end
INFO  [2017-08-09 02:24:34,849] com.hqq.concurrency.read_write_lock.Reader: Reader1 read end
INFO  [2017-08-09 02:24:34,849] com.hqq.concurrency.read_write_lock.Reader: Reader2 read end
INFO  [2017-08-09 02:24:34,865] com.hqq.concurrency.read_write_lock.Reader: Reader3 read end
INFO  [2017-08-09 02:24:34,866] com.hqq.concurrency.read_write_lock.Reader: Reader4 read end
INFO  [2017-08-09 02:24:34,866] com.hqq.concurrency.read_write_lock.Writer: Writer4 write begin
INFO  [2017-08-09 02:24:35,402] com.hqq.concurrency.read_write_lock.Writer: Writer4 write end
INFO  [2017-08-09 02:24:35,402] com.hqq.concurrency.read_write_lock.Writer: Writer0 write begin
INFO  [2017-08-09 02:24:35,904] com.hqq.concurrency.read_write_lock.Writer: Writer0 write end
INFO  [2017-08-09 02:24:35,904] com.hqq.concurrency.read_write_lock.Writer: Writer3 write begin
INFO  [2017-08-09 02:24:36,410] com.hqq.concurrency.read_write_lock.Writer: Writer3 write end
INFO  [2017-08-09 02:24:36,411] com.hqq.concurrency.read_write_lock.Writer: Writer1 write begin
INFO  [2017-08-09 02:24:36,911] com.hqq.concurrency.read_write_lock.Writer: Writer1 write end
INFO  [2017-08-09 02:24:36,912] com.hqq.concurrency.read_write_lock.Writer: Writer2 write begin
INFO  [2017-08-09 02:24:37,415] com.hqq.concurrency.read_write_lock.Writer: Writer2 write end

2023年全国职业院校技能大赛 网络系统管理服务模块 Linux部分讲解 网络系统管理,Linux,服务部署,Chinaskills,2023国赛 阅读详情

相关推荐

论文解析-sciPENN

用这2个CITE-seq共有的protein作为训练集,分别将他们特有的protein作为测试集,评估sciPENN对CITE-seq数据集中缺失的protein丰度预测准确度。来自Seurat 4 的PBMC数据集,样本被注射水疱性口炎病毒 (VSV) 载体 HIV 疫苗,数据集包含每个样本注射疫苗0天、3天、7天的CITE-seq数据。PBMCs作为训练集,MALT作为测试集,利用scRNA-seq测试17个蛋白质表达水平。Monocyte:随机取4个样本作为训练集,剩余4个样本作为测试集。

weixin_46065198的博客 1020

Java Concurrency代码实例之四-锁

本文的读者应该是已经掌握了基本的Java多线程开发技巧,但不熟悉Java Concurrency包的程序员。本文是本系列的第四篇文章,前三篇文章请看这里: https://zhuanlan.zhihu.com/p/26724352 https://zhuanlan.zhihu.com/p/27148381 https://zhuanlan.zhihu.com/p/273383951

LogicTeamLeader的专栏 928

中介效应、调节效应与交互效应:从概念辨析到统计建模全指南

在社会科学与数据分析研究中,理解变量之间的因果关系与条件性影响是核心任务之一。回归分析作为最基础的统计工具,常被用于探索自变量对因变量的作用机制,而中介效应与调节效应则分别回答了“如何影响”与“何时影响不同”的深层问题。中介效应通过路径分析拆解因果链条,揭示内部的传导机制;调节效应则借助交互项识别影响的边界条件。Bootstrap法已成为检验间接效应的主流手段,而简单斜率分析则让调节作用的模式更加直观。无论是用户研究、医学统计还是产品数据分析,掌握这些模型都能帮助研究者构建更具解释力的实证框架。本文基于大量

weixin_29051149的博客 330

程序设计中并发(Concurrency)和并行(Parallelism)的区别

更高层面的并发设计,他脱离了线程和进程层面,他把某个具体的任务和具体的处理机提前建立一个对应的map关系,任务处理机仅仅负责处理和他建立对应关系的任务,而对单个处理机而已仅仅是一个串行的任务处理机,这样整个并发模型的构建具有很强的灵活性和稳定性,尤其适应企业分布的环境的任务处理。因此,在需要并发处理的时候,多进程是一种更好的选择。:基于多线程的并发任务设计,把不同的任务分配给操作系统某个进程的多个线程去处理,这样,各个线程只负责处理已分配的独享权限的任务,从而实现在单台处理机上的任务并发。

m0_46256255的博客 1576

集成calibre到cadence virtuoso环境中 load: can‘t access file - “/opt/eda/Mentor/lib/calibre.skl“

项目场景: 设想是将Calibre集成到cadence virtuoso中,但网上的解决办法尝试过在本机上实验都有点问题,因此想记录下来我的解决办法仅供参考。 问题描述: 安装好cadence, calibre之后打开virtuoso,CIW窗口显示 *Error* load: can't access file - "/opt/eda/Mentor/lib/calibre.skl" 问题是出在calibre.skl的加载路径出错,尝试网上的在工程目录下修改.cdsinit文件,添加calibre安装

weixin_52714276的博客 1万+

视觉巡线小车(STM32+OpenMV)——技术总结

在现代机器人技术中,视觉巡线是一种常见的导航方式,它允许机器人通过识别和跟踪地面上的线路来自主导航。本文将总结使用STM32微控制器和OpenMV视觉模块来实现视觉巡线小车的关键技术和步骤。

weixin_66608063的博客 3076

VC2010新增加对多线程的支持类

临界区的类:Concurrency::critical_section; 相对应的自动加解锁类 Concurrency::critical_section::scoped_lock 读写问题Concurrency::reader_writer_lock;写对应的自加解锁Concurrency::reader_writer_lock::scoped_lock;读对应的自加解锁Concurrency

珍爱生命 远离C++ 2585

Kafka延迟队列实现方案全解析

$ \text{时间轮} = \text{环形数组} + \text{分层设计} $$需要补充代码实例或特定场景的优化方案可进一步细化,此大纲已覆盖核心技术路径。

lz989796的博客 816

JDK 5.0 Concurrency Utilities 并发处理(3)ReadWriteLock 读写锁

1package com.vinko.test.concurrent;   2   3import java.util.Calendar;   4import java.util.Map;   5import java.util.TreeMap;   6//import java.util.concurrent.locks.Condition;   7import java.util.

路人甲 706

Node-RED系列(二二):使用dashboard搭配echarts制作漂亮的面板

在node-red中dashboard 是一个很常用的模块,其中它有一个chart节点可以用来制作一些图表,比如柱状图,折线图,饼图,但其中的图表并不是很美观,而且可配置项非常的少。 于是就有很多小伙伴找我做一套比较好看的图表面板,在对比了一下几个图表库,我选中了echarts。 不仅美观大方,而且非常容易集成,配置。下面先来看一下我做的效果。这里是直接做了四个折线图,第一个折线图有动态效果,第二个折线图是一个多线条的折线图,第三个折线图是在一个图例显示两个折线图。第二第三都可以用于数据对比。 第四个折线

知无涯 1万+

共享单车数据抓取与分析:使用Python爬虫抓取共享单车使用数据与地图信息

通过本篇博客,我们展示了如何使用Python爬虫抓取共享单车的使用数据和地图信息,并通过简单的数据分析得出有价值的见解。在实际应用中,数据的收集与分析不仅能帮助城市管理者更好地规划单车站点,还能为用户提供更精准的单车使用体验。未来,我们可以将此分析与机器学习模型相结合,进一步预测单车的使用趋势,优化调度算法,实现更加智能的共享单车管理。

2201_76125261的博客 2204

linux线程同步-读写锁(reader-writer lock)

互斥锁是要么加锁要么不加锁,而且同一时刻只允许一个线程对其加锁。 读写锁有更高的并行性: 1、读写锁有三种状态:读模式下加速(共享)、写模式下加锁(独占)以及不加锁。 2、一次只有一个线程可以占有写模式下的读写锁;但是多个线程可以同时占有读模式下的读写锁。 3、读写锁在写加锁状态时,其他试图以写状态加锁的线程都会被阻塞。读写锁在读加锁状态时,如果有线程希望以写模式加锁时,必须阻塞,直...

背着行囊去远方的博客 767

YOLOv8 PCB缺陷检测系统全流程实战:从开发到UI展示详解

毕设路上难免有波折,但只要跟着这个教程把“数据集处理、模型训练、UI开发”每一步都落实,你就已经超越了大多数同学。这个“PCB缺陷检测系统”既有技术深度(YOLOv8是工业级主流算法),又有工程价值(解决电子制造的实际痛点),还具备出色的可视化展示——这样的毕设,拿高分是水到渠成的事。

FJN110的博客 214

Java并发编程核心组件与高并发实战指南

并发编程是现代Java开发的核心技术,主要解决多线程环境下的资源共享与协作问题。Java内存模型(JMM)通过happens-before规则保证内存可见性,而java.util.concurrent包提供原子变量、锁机制、并发容器等基础设施。其中ReentrantLock相比synchronized提供更细粒度的控制,支持可中断锁获取和公平锁选项;ConcurrentHashMap采用分段锁或CAS优化实现高并发访问。这些技术在百万级QPS系统中至关重要,如电商秒杀采用双重检查锁防止缓存击穿,使用令牌桶算

weixin_34038293的博客 370

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Linux线程间同步 —— 读写锁(reader-writer lock)

1 读写锁简介 互斥量要么是加锁状态,要么是不加锁状态,而且一次只有一个线程对其进行加锁。读写锁可以有3种状态:读加锁状态、写加锁状态和不加锁状态。一次只有一个线程可以占有写模式读写锁,但是可以有多个线程同时占有读模式的读写锁。因此读写锁比互斥量具有更高的并行性。 当读写锁处于写加锁状态时,所有试图对这个锁加锁的线程都将被阻塞。当读写锁处于读加锁状态时,所有试图以读模式对这个锁访问的线程都将得

electrocrazy的博客 2497

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

设计模式Design Patterns (一)

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一

Heqianqian的博客 2942

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

设计模式 Concurrency 之 Mutex 互斥锁

定义 例子1. 定义不同线程通过竞争进入临界区(共享的数据和硬件资源),为了防止访问冲突,在有限的时间内只允许其中之一独占性的使用共享资源。是Semaphore的特殊情况 当信号量的阈值设为1时就是互斥锁模式2. 例子Lockpackage com.hqq.concurrency.mutex;/** * Lock * Created by heqianqian on 2017/7/29. */

Heqianqian的博客 912

设计模式 Concurrency 之 Semaphore 信号量

定义 适用场景 例子1.定义Semaphore是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做完自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞。Semaphore可以用来构建一些对象池,资源池之类的,比如数据库连接池,我们也可以创建计数为1的Semaphore,将其作为一种类似互斥锁的机制,这也叫二元信号量,表示两种互斥状态2. 适用场景 保护一个重要[代码

Heqianqian的博客 781

设计模式 Concurrency 之 Balking 慢行模式

定义 例子1.定义当现在不适合这个操作,或者没有必要进行这个操作时,就直接放弃而回去 2.例子WashinMachineStatepackage com.hqq.concurrency.balking;/** * WashingMachineState * Created by heqianqian on 2017/7/30. */ public enum WashingMachineStat

Heqianqian的博客 728

设计模式 Concurrency 之 ProducerConsumer 生成者消费者模式

定义 优缺点 例子1. 定义某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程等)。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。2. 优缺点优点: 解耦 假设生产者和消费者分别是两个类。如果让生产者直接调用消费者的某个方法,那么生产者对于消费者就会产生依赖(也就是耦合)。将来如果消费者的代码发生变化,可能会影响到生产者。而如

Heqianqian的博客 614

设计模式 Concurrency 之 Half_Sync_Half_Async 半同步半异步模式

动机 应用场景 实现方案1.动机 同步模式编程简单 但是IO的利用率低 异步模式编程复杂 但是IO利用率高 此模式综合了同步异步的优缺点 高层中使用同步IO模型,简化编程。低层使用异步IO模型 高效执行 2.应用场景 1.系统必须响应和处理外部异步发生的事件 2、一个或多个任务必须在单独的控制线程中执行 其他任务可以在多线程执行 上层任务[数据库查询,文件传输]使用同步IO模式 简化编写并行程序的

Heqianqian的博客 591

设计模式 六大原则

之前面试的时候有被问到过这个问题 (一) 单一职责原则不要存在多余一个导致类变更的原因。(一个类只负责一项职责)问题:类T负责两个不同的职责P1、P2,当由于职责P1需求发生改变而需要改变T时,可能会导致原来运行正常的P2功能出现故障。解决方法:遵循单一职责原则,分别建立类T1、T2,分别负责P1,P2职责,这样修改类T1时不会影响P2。遵循单一职责原则的优点有: 降低类的复杂度 提高类的可读性,提

Heqianqian的博客 418

怎样设计一个好架构:八个评价维度、四层思考深度,以及 23 种设计模式各自解决什么问题

架构要解决的是变化、理解、故障和协作的成本。本文从耦合、可迁移、可适配、复杂度等八个维度讲怎么评价架构,讲维度之间怎么取舍、架构思考可以分几层,再用可编译的 C 代码过一遍 23 种设计模式。

weixin_52400878的博客 308

高扩展性AI应用架构指南:融合RAG检索、Agent编排与OpenAPI/RPC工具网关的设计模式

本文提出高扩展性AI应用的三层架构:RAG检索层(知识供给)、Agent编排层(决策推理)、工具网关层(能力执行)。通过检索策略路由实现智能分流,混合检索采用RRF融合算法提升精度;Agent层采用无状态设计与外部状态存储,支持水平扩展;工具网关层通过协议标准化与动态注册解耦系统。核心思想是各层独立演进,不相互牵制,实现从“能跑”到“可扩展”的工程跃迁。

2301_80078096的博客 180

设计模式速查

本文梳理12个核心设计模式,涵盖创建型、结构型与行为型,提供简洁Java实现与面试要点。重点解析单例(静态内部类)、工厂(方法/抽象)、建造者(链式构建)等高频模式,强调代码可维护性与扩展性,附速记口诀与对比表格,助力开发与面试双提升。

ttlovet的博客 154

【第四部分:Agentic 智能体设计模式】17. Agent 路由模式详解:从意图识别到动态模型选择

本文介绍 Agent Routing(路由模式)的基本原理与工程实现,重点分析任务路由、模型路由、工具路由和专业 Agent 路由的区别及适用场景。结合 BaseMetas EKA 企业知识助手,介绍规则与模型混合路由、Java Router 实现、复合任务处理、低置信度兜底和误路由评估,并以 Jev 专用决策模型、动态模型选择及 Tool Search 等近期技术为例,说明如何在保证权限与执行安全的前提下,提高 Agent 任务分发的准确性和效率。

weixin_42258782的博客 620
上一篇: 设计模式 Concurrency 之 Mutex 互斥锁
下一篇: 设计模式 Concurrency 之 ProducerConsumer 生成者消费者模式
heqianqiann
博客等级 码龄11年 111粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值