<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/bpingchang</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; bpingchang]]></copyright><item><title><![CDATA[AI推理性能优化的关键技术即演进路径]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/169069239</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/169069239</guid><author>bpingchang</author><pubDate>Sun, 25 Oct 2026 22:07:03 +0800</pubDate><description><![CDATA[先减少计算量，再提升计算效率；先优化单次推理，再优化批量服务；最后从单机优化走向集群级协同。]]></description><category></category></item><item><title><![CDATA[RocksDB的代码分析报告]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/161027539</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/161027539</guid><author>bpingchang</author><pubDate>Wed, 13 May 2026 23:42:50 +0800</pubDate><description><![CDATA[RocksDB 的本质是：设计目的WAL崩溃恢复MemTable高速写SST顺序 IOCompaction降低读放大VersionSetMVCC热点加速写性能极强SSD 友好可扩展性高Compaction 灵活工程成熟。]]></description><category></category></item><item><title><![CDATA[DPDK和RDMA的区别]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/130375830</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/130375830</guid><author>bpingchang</author><pubDate>Tue, 25 Apr 2023 23:27:42 +0800</pubDate><description><![CDATA[相同点：1）两者均为kernel bypass技术，可以减少中断次数，消除内核态到用户态的内存拷贝；相异点：1）DPDK是将协议栈上移到用户态，而RDMA是将协议栈下沉到网卡硬件，DPDK仍然会消耗CPU资源；2）DPDK的并发度取决于CPU核数，而RDMA的收包速率完全取决于网卡的硬件转发能力3）DPDK在低负荷场景下会造成CPU的无谓空转，RDMA不存在此问题4）DPDK用户可获得协议栈的控制权，可自主定制协议栈；RDMA则无法定制协议栈。]]></description><category></category></item><item><title><![CDATA[Nginx(三)：日志]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/129338559</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/129338559</guid><author>bpingchang</author><pubDate>Sat, 04 Mar 2023 23:10:50 +0800</pubDate><description><![CDATA[nginx日志格式]]></description><category></category></item><item><title><![CDATA[Lambda表达式基础知识]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/121451666</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/121451666</guid><author>bpingchang</author><pubDate>Sun, 21 Nov 2021 11:59:42 +0800</pubDate><description><![CDATA[一、Lambda用法

之前写Optional这个类的时候，简单说了一下Lambda是怎么用的，这里再跟大家一起回顾一下，Lambda的语法是这样的：



语法

以Lambda语法创建线程和匿名内部类创建线程的区别（显然代码少了很多！）：


public static void main(String[] args) {
    // 用匿名内部类的方式来创建线程
    new Thread(new Runnable() {
        @Override
        public void]]></description><category></category></item><item><title><![CDATA[Lambda表达式基础知识]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/121413580</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/121413580</guid><author>bpingchang</author><pubDate>Fri, 19 Nov 2021 00:50:26 +0800</pubDate><description><![CDATA[一、Lambda用法

之前写Optional这个类的时候，简单说了一下Lambda是怎么用的，这里再跟大家一起回顾一下，Lambda的语法是这样的：



语法

以Lambda语法创建线程和匿名内部类创建线程的区别（显然代码少了很多！）：


publicstaticvoidmain(String[]args){
//用匿名内部类的方式来创建线程
newThread(newRunnable(){
@Override
publicvoid...]]></description><category></category></item><item><title><![CDATA[进程间通信IPC (InterProcess Communication)]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/117572879</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/117572879</guid><author>bpingchang</author><pubDate>Fri, 04 Jun 2021 21:02:53 +0800</pubDate><description><![CDATA[一、进程间通信的概念

每个进程各自有不同的用户地址空间，任何一个进程的全局变量在另一个进程中都看不到，所以进程之间要交换数据必须通过内核，在内核中开辟一块缓冲区，进程1把数据从用户空间拷到内核缓冲区，进程2再从内核缓冲区把数据读走，内核提供的这种机制称为进程间通信（IPC，InterProcess Communication）



进程间通信模型



二、进程间通信的7种方式

第一类：传统的Unix通信机制1. 管道/匿名管道(pipe)

管道是半双工的，数据只能向一个方向流动；需要双方通信时..]]></description><category></category></item><item><title><![CDATA[Nginx源码学习(一)：nginx进程模型解析]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/117537057</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/117537057</guid><author>bpingchang</author><pubDate>Thu, 03 Jun 2021 23:33:41 +0800</pubDate><description><![CDATA[nginx进程模型

nginx有两类进程，一类称为master进程(相当于管理进程)，另一类称为worker进程（实际工作进程）。启动方式有两种：

单进程启动：此时系统中仅有一个进程，该进程既充当master进程的角色，也充当worker进程的角色。
	多进程启动：此时系统有且仅有一个master进程，至少有一个worker进程工作。
master进程主要用来管理worker进程，包含：接收来自外界的信号，向各worker进程发送信号，监控worker进程的运行状态，当worker进程退出后(异常情况下]]></description><category></category></item><item><title><![CDATA[Nginx(一)：安装与部署]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/82766308</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/82766308</guid><author>bpingchang</author><pubDate>Wed, 19 Sep 2018 00:24:15 +0800</pubDate><description><![CDATA[nginx两种安装方法：源码安装和一键安装]]></description><category></category></item><item><title><![CDATA[glibc内存管理ptmalloc源代码分析]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/80584657</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/80584657</guid><author>bpingchang</author><pubDate>Tue, 05 Jun 2018 17:35:03 +0800</pubDate><description><![CDATA[https://paper.seebug.org/papers/Archive/refs/heap/glibc%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86ptmalloc%E6%BA%90%E4%BB%A3%E7%A0%81%E5%88%86%E6%9E%90.pdfhttps://blog.youkuaiyun.com/maokelong95/article/details/52...]]></description><category></category></item><item><title><![CDATA[java内存分析工具]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/54695521</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/54695521</guid><author>bpingchang</author><pubDate>Mon, 23 Jan 2017 20:30:11 +0800</pubDate><description><![CDATA[1. jstat
http://blog.youkuaiyun.com/fenglibing/article/details/6411951
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html


2. 分析栈内存（stack）
jstack/kill -3
http://jameswxx.iteye.com]]></description><category></category></item><item><title><![CDATA[git 不错的教程]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/53224290</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/53224290</guid><author>bpingchang</author><pubDate>Fri, 18 Nov 2016 22:31:38 +0800</pubDate><description><![CDATA[http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000




http://www.worldhello.net/gotgithub/04-work-with-others/010-fork-and-pull.html





http://jingyan.bai]]></description><category></category></item><item><title><![CDATA[【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题（含代码）]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/51419903</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/51419903</guid><author>bpingchang</author><pubDate>Sun, 15 May 2016 22:44:00 +0800</pubDate><description><![CDATA[原文链接：http://blog.youkuaiyun.com/ns_code/article/details/14642873




在第一章《基本套接字》中，作者给出了一个TCP Socket通信的例子——反馈服务器，即服务器端直接把从客户端接收到的数据原原本本地反馈回去。

     书上客户端代码如下：





[java] view
 plain copy


]]></description><category></category></item><item><title><![CDATA[聊聊 Linux 中的五种 IO 模型]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/51419890</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/51419890</guid><author>bpingchang</author><pubDate>Sun, 15 May 2016 22:41:57 +0800</pubDate><description><![CDATA[原文链接：http://blog.jobbole.com/99905/




上一篇《聊聊同步、异步、阻塞与非阻塞》已经通俗的讲解了，要理解同步、异步、阻塞与非阻塞重要的两个概念点了，没有看过的，建议先看这篇博文理解这两个概念点。在认知上，建立统一的模型。这样，大家在继续看本篇时，才不会理解有偏差。

那么，在正式开始讲Linux IO模型前，比如：同步IO和异步IO，阻塞IO和非]]></description><category></category></item><item><title><![CDATA[WEB请求处理（1）：浏览器请求发起处理]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/51328941</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/51328941</guid><author>bpingchang</author><pubDate>Sat, 14 May 2016 22:51:19 +0800</pubDate><description><![CDATA[http://blog.jobbole.com/100461/]]></description><category></category></item><item><title><![CDATA[日志那点事儿——slf4j源码剖析]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/50366053</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/50366053</guid><author>bpingchang</author><pubDate>Sun, 20 Dec 2015 22:23:25 +0800</pubDate><description><![CDATA[阅读目录


　　slf4j下载
　　那么如何使用呢？
　　接下来进入正题，slf4j源码的解读！
　　这里不了解类加载器的原理的可能会不大明白！



　　总结Slf4j工作原理
前言：

　　说到日志，大多人都没空去研究，顶多知道用logger.info或者warn打打消息。那么commons-logging,slf4j,logback,log4j,logging又是什么]]></description><category></category></item><item><title><![CDATA[log4j.xml配置详解]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/50286357</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/50286357</guid><author>bpingchang</author><pubDate>Sun, 13 Dec 2015 20:58:52 +0800</pubDate><description><![CDATA[Xml代码


     
     
        
     
        
         
             
            
                value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" />]]></description><category></category></item><item><title><![CDATA[数字证书原理(ssl, https)]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/49299683</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/49299683</guid><author>bpingchang</author><pubDate>Wed, 21 Oct 2015 22:59:58 +0800</pubDate><description><![CDATA[http://www.360doc.com/content/13/0809/14/1073512_305848184.shtml]]></description><category></category></item><item><title><![CDATA[Java并发编程：线程池的使用]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/48557405</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/48557405</guid><author>bpingchang</author><pubDate>Fri, 18 Sep 2015 23:19:16 +0800</pubDate><description><![CDATA[在前面的文章中，我们使用线程的时候就去创建一个线程，这样实现起来非常简便，但是就会有一个问题：

　　如果并发的线程数量很多，并且每个线程都是执行一个时间很短的任务就结束了，这样频繁创建线程就会大大降低系统的效率，因为频繁创建线程和销毁线程需要时间。

　　那么有没有一种办法使得线程可以复用，就是执行完一个任务，并不被销毁，而是可以继续执行其他的任务？

　　在Java中可以通过线程池]]></description><category></category></item><item><title><![CDATA[Java并发编程：Callable、Future和FutureTask]]></title><link>https://blog.youkuaiyun.com/bpingchang/article/details/48557251</link><guid>https://blog.youkuaiyun.com/bpingchang/article/details/48557251</guid><author>bpingchang</author><pubDate>Fri, 18 Sep 2015 23:17:14 +0800</pubDate><description><![CDATA[在前面的文章中我们讲述了创建线程的2种方式，一种是直接继承Thread，另外一种就是实现Runnable接口。

　　这2种方式都有一个缺陷就是：在执行完任务之后无法获取执行结果。

　　如果需要获取执行结果，就必须通过共享变量或者使用线程通信的方式来达到效果，这样使用起来就比较麻烦。

　　而自从Java 1.5开始，就提供了Callable和Future，通过它们可以在任务执行完毕]]></description><category></category></item></channel></rss>