- 博客(14)
- 收藏
- 关注
原创 大模型系列(一)——适合初学者的深度学习入门(2)
中讲述了前向传播算法的过程是输入经过连续的矩阵相乘和激活函数得到输出,而连续相乘的矩阵就是权重(weight),其初始化是通过随机初始化完成的,那么将输入与之相乘得到的结果与真实值必然有所偏差,那么如何能得到最终的权重,使得输入得到与真实值相近的输出,就是训练神经网络的目的。在神经网络的训练中也是采用相同的方式,只不过神经网络中需要更新权重矩阵中的数值,并且浅层网络和深层网络的权重都需要更新,那么最终的误差值的梯度是如何传导给浅层网络的呢?矩阵的1行1列,也就是下标表示在矩阵中的位置,上标表示序号,
2025-03-07 13:16:01
637
原创 大模型系列(一)——适合初学者的深度学习入门(1)
人工智能发展到今天,无论是deepseek这种大语言模型还是各种语音处理、图像处理模型,它们的结构中或多或少都包含或者有类似多层感知机(MultiLayer Perception, MLP)这样的结构的。个人认为,如果对多层感知机有一个感性认识的话,它就是一个『拟合』的方法,在中学时期,一定学过最小二乘法,而上了大学,可能也会接触到插值算法一类的数值方法,这些方法都是进行函数的拟合;而在现实生活中,图像、声音、语言这些东西都是一些离散的、非结构化的数据,例如很简单的图像识别,图像可以认为是输入x。
2025-03-05 17:09:54
599
原创 Proactor线程模型与协程
在现代的服务器端编程中,多线程已经是一种广泛应用的技术,它可以将任务并行化从而提高响应时间。一种应用比较广泛的服务器多线程模型是Reactor,也被称为是基于事件的线程模型。详细解读可以参考这一系列文章。与之对应的是Proactor线程模型,它的主要特点则是整个函数逻辑是用回调的链条组成的,这句话可能不太好理解,后面会详细解释;而协程则是一种在同一个线程内实现的异步操作,详细解释可以参考。二者的共同点在于,,下面将详细叙述。
2025-02-23 16:39:27
541
原创 多线程服务器分析——Reactor线程模型和性能分析(四)
当请求到达网关层时,发现客户端是的请求是上传文件,那么就开始接收,接收一个分块就传递给数据管理层,直到最后一个分块在数据管理层写入成功或者中途某个分块处理失败,数据管理层将该信息返回给网关层,如果失败网关层直接返回用户写入失败,如果成功则向元数据管理层写入元数据,元数据管理层写入成功再返回给网关,直到这时网关层才能返回给用户该文件写入成功的响应。本章根据一个实际的分布式存储系统的写入文件的案例,结合之前讲述的线程模型,实现了一个完整的多线程任务的执行逻辑。
2025-02-23 15:13:25
1152
原创 多线程服务器分析——Reactor线程模型和性能分析(三)
线程池实际上就是为了避免创建销毁线程的开销而使用的一种机制,本质上就是一个生产者-消费者模型,首先创建好一定数量的线程,当没有任务的时候就处于休眠状态,当有任务加入到任务队列中时就从中取出并执行。为什么要考虑这两个问题?当上传大文件的时候,文件会分块进行上传,一个socket将会有连续的数据输入,那么epoll将会一直监听到该socket的可读事件,那么EventLoop就会一直处理这个socket,而从缓冲区读取数据则是阻塞的,在单线程情况下就会阻塞其他socket的处理。
2025-02-23 15:09:13
1296
原创 多线程服务器分析——Reactor线程模型和性能分析(二)
前面的章节介绍了reactor模型的基本结构,也通过代码体现了非阻塞IO带来的益处。不过还遗留了一个问题——线程是一种有限的资源,不可能无限的扩展线程,那么该怎样利用有限的线程资源尽可能的榨干系统的性能,可不可以使用一个连接开启一个线程进行处理?
2025-02-23 15:06:29
678
原创 多线程服务器分析——Reactor线程模型和性能分析(一)
上接在序章中的最后提到了两个服务器瓶颈的原因:1、能够扩展的线程数量是有限的2、阻塞式的等待socket会让线程一直处于空闲状态(当然socket可以换成其他文件描述符)针对问题1,既然线程的数量是有限的,那我们就尽最大的可能去利用它,榨干它的能力;针对问题2,则可以换一种思路,如果当前的socket没有数据传输过来,那就立即返回一个错误信息,处理下一个建立的连接,然后循环询问所有建立的连接的socket,如果某个socket有数据传输过来就立马进行处理,这就是非阻塞(NIO)的思想。
2025-02-23 15:02:24
914
原创 多线程服务器分析——Reactor线程模型和性能分析(序章)
最近在拜读陈硕的《Linux多线程服务端编程》[1],目前读到第3章,主要讲常用的服务端的编程模型,其中提到了很多线程模型以及与性能相关的分析,读了之后想实践一下书中提到的理论,也顺便复习一下网络编程的相关内容,于是搜索了很多关于Reactor和Proactor相关的内容,对于里面概念的讲述是可以理解的,但是如果具象化到代码中还是无法第一时间在脑中形成概念。因此想结合书中第三章的讲解,捋一捋多线程服务器的模型以及性能分析,通过C++代码逐步弄明白各种服务端模型和IO模型。
2025-02-23 14:56:41
906
原创 【RGW】Ceph中的异步回调机制——AioCompletionImpl
在Ceph中,有许多地方有异步回调机制的应用,用于异步获取执行结果,本篇文章介绍在rgw处的异步回调。以RGWRados::Bucket::UpdateIndex::complete()函数为例,complete这个函数是在_do_write_meta中调用的的index_op->complete()。
2024-11-05 11:34:59
895
原创 Ceph中的线程池
ceph中线程池的整体实现有许多的类协作完成,也有不同的实现方案,本文将以其中一种为例进行讲解。首先我们来看在multisite中用到的一处使用线程池的请求。不了解multisite运行机制的同学不必担心,这里只是通过multisite的例子引入线程池!multisite是ceph进行多集群同步的机制,保证一个主集群和一个或多个备集群有完全相同的对象,整个机制是由上面提到的协程实现的,其基础类是RGWCoroutine。
2024-09-29 17:11:40
885
原创 boost协程库代码解读
在multisite中使用的协程类RGWCoroutine,其根源来自于boost库的boost::asio::coroutine。协程是一种调度程序执行顺序的技术,本质上还是在同一个线程中,通过switch case语句来实现执行语句的跳转。
2024-09-14 17:44:11
509
原创 Ceph中的消息通信——Messenger、Message和Connection详解
综合以上的分析可以发现,在消息传递的过程中,Messenger像是一个管理统筹的角色,负责相关模块的初始化和运行,Connection是真正负责发送,Message则是传递消息的格式,EventCenter则是负责调度,实现异步IO的关键。最后用一个函数调用栈,阐述一个来自radosgw层的操作如何传递到OSD层(以setxattr为例)。我们以complete multipart函数中的setxattr为例,将所有涉及的函数的调用关系呈现一遍。
2024-08-29 16:05:47
785
2
原创 Signal/Slot机制实现观察者模式
connect函数就相当于register,并且可以选择是否绑定一个对象,call函数就相当于遍历observer并且update(即notifyObserver),与notifyObserver需要上锁不同的是,call首先为SlotList增加一个引用计数,使其不会被析构,因为遍历并执行SlotImpl的回调函数对于SlotList来说是『读操作』,所以不需要上锁,这就解决了开篇提出的『锁争用』的问题。
2024-08-07 20:48:15
793
C++实现的多线程分布式存储服务器代码
2025-02-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人