高性能网络框架
文章平均质量分 95
这里收集有关于从0开始实现高性能网络模型架构相关的文章
UPUP小亮
认真对待每一篇博客
展开
-
IO多路复用原理深度总结【万字总结】
阻塞和非阻塞主要关注的是I/O操作或系统调用的行为。阻塞(Blocking):在阻塞操作中,如果数据还没有准备好(例如,等待数据从磁盘读取或从网络接收),则调用者(通常是一个线程或进程)会被阻塞,直到数据准备好为止。在此期间,调用者无法执行其他任务,只能等待I/O操作完成。阻塞I/O操作的典型例子是普通的文件读写。非阻塞(Non-blocking):在非阻塞操作中,如果数据还没有准备好,调用者不会被阻塞,而是立即返回一个错误码(例如,表示资源不可用)。原创 2023-06-02 19:14:46 · 5754 阅读 · 0 评论 -
经典并发问题的深度分析与实现【c++与golang】【万字分析】
锁与信号量经典的多线程并发问题,需要考虑线程之间的同步和互斥,常用的解决方法包括互斥锁、条件变量、信号量等。针对不同的问题,需要选择合适的解决方法,保证线程之间的正确同步。生产者-消费者问题:有一组生产者线程/进程和一组消费者线程/进程,它们共享一个有限容量的缓冲区。生产者负责将数据项放入缓冲区,消费者则从缓冲区中取出数据项进行处理哲学家就餐问题:涉及到多个哲学家和多个餐叉,每个哲学家需要持有两个餐叉才能进餐。当多个哲学家同时想进餐时,可能会出现死锁。读者-写者问题。原创 2023-06-10 12:15:22 · 1783 阅读 · 0 评论 -
线程池与协程池的原理与实现【c++与gloang】【万字分析】
C++ 线程池是一种多线程编程实现方式,它可以将多个任务并发执行,提高程序的运行效率。具体而言,线程池维护一个线程集合,在程序运行时创建一定数量的线程,并将任务插入到队列中,等待空闲线程来执行。Go语言中的线程池通常指的是协程池,它是一种通过重复利用大量轻量级协程来节省系统开销和提高并发性能的技术。协程轻量、创建和销毁成本低。但是,如果简单地在程序中创建大量的协程,会导致系统开销较大,降低性能。因此,使用协程池管理和控制协程数量是一种有效的解决方案。原创 2023-06-02 22:13:19 · 2503 阅读 · 1 评论 -
io多路复用select与epoll模型的实现与对比【通俗易懂】
select和epoll都可以用来实现高并发TCP服务器,但是它们的实现方式有一些不同。在select模型中,我们需要将需要监控的文件描述符全部加入一个fd_set结构中,并对其进行轮询,查看其中是否有文件描述符的状态发生了变化。而在epoll模型中,我们只需要将需要监听的文件描述符添加到epoll实例中,当文件描述符状态发生变化时,epoll_wait函数会返回相应的事件数据。因此,与select模型相比,epoll模型更加高效。原创 2023-06-04 20:38:23 · 992 阅读 · 0 评论 -
c++使用条件变量与互斥锁来实现读写锁
读写锁与普通的互斥锁不同,它允许多个线程同时持有读锁,并且读取操作不会产生数据竞争,因此多个读取操作可以并发执行,提高了程序的并发性。而在写入操作时,为了保证数据的一致性,只能有一个线程持有写锁,其他的线程需要等待写锁被释放之后再进行操作。在 C++ 中,可以使用标准库中的 std::shared_mutex 类型来实现读写锁。std::shared_mutex 类型提供了 lock_shared、unlock_shared、lock 和 unlock 等方法,可以方便地实现读写锁。原创 2023-06-09 14:51:06 · 1125 阅读 · 0 评论 -
c++与golang的网络编程学习总结与对比【c++与golang】【万字分析】
本文总结对TCP协议的学习以及对比c++与go语言在socket网络编程中的实现。具体而言从TCP以及socket编程原理出发。然后对c++以及go语言的网络通信并发服务器以及客户端进行了实现。原创 2023-04-22 18:25:43 · 3261 阅读 · 1 评论 -
高性能网络模式:Reactor 的原理与思考
Reactor 模式和 Proactor 模式都是处理并发 I/O 事件的设计模式。它们各自的核心思想是将 I/O 操作与实际处理逻辑解耦。本文将详细介绍高性能网络模式**:Reactor 和 Proactor 的原理**,并通过 C++ 代码示例来展示它们的实现。我们将深入探讨这两种模式的优缺点,以及如何在实际项目中应用它们。Proactor模式是一种基于事件驱动的网络编程模式。原创 2023-06-05 21:17:00 · 890 阅读 · 0 评论 -
高性能网络模型Mutiple Reactor + ThreadPool的研究与实现【项目研究】
多 Reactor 多进程 / 线程(Mutiple Reactor + ThreadPool)也叫 one loop per thread + 线程池。既有多个Reactor来处理IO,也使用线程池来处理计算,这种模式适合既有突发IO,又有突发计算的应用。适用于网络密集型以及业务密集型。在该网络模式中,Server 端主要被分为两部分:MainReactor 和 SubReactor。原创 2023-06-07 22:57:47 · 1298 阅读 · 0 评论 -
锁与信号量的深度总结与实现【c++与golang】【万字总结】
线程同步和互斥是多线程编程中的两个重要概念,它们都是为了解决多线程环境下的资源共享和访问问题。**线程同步:**线程同步是指多个线程按照一定的顺序执行,以确保在访问共享资源时,不会出现数据不一致的问题。同步机制主要包括条件变量和信号量。**线程互斥:**线程互斥是指在同一时刻,只允许一个线程访问共享资源,以防止数据不一致和竞争条件。互斥锁是实现线程互斥的主要工具。在操作系统中,锁、条件变量和信号量都是用来实现线程同步与互斥的机制。锁(Lock)是一种互量,用于保护共享资源,防止多个线程同时访问。原创 2023-06-09 15:18:52 · 1874 阅读 · 0 评论