Administrator
发布于 2023-09-21 / 9 阅读 / 0 评论 / 0 点赞

9月21日

9:40起床

11:00学习-12:10

2:10学习

https://share.weiyun.com/bTE3z98B 密码:3q5xk8

链接

网络编程

信号驱动IO
  1. 询问时通过信号返回

  2. 有数据时发送信号给应用层

异步IO
  • 询问和拷贝时都不阻塞

  • Windows:IOCP

  • LINUX:io_uring

如何区分同步IO和异步IO?

select/poll/epoll

都是同步IO,都是上层用户层程序进行拷贝,拷贝时,应用层依然会阻塞

区分点:

拷贝是由应用拷贝还是内核拷贝?应用拷贝必然要阻塞,所以是同步IO。

网络相关的问题

  1. 惊群效应

一般发生在多个进程同时阻塞等待一事件的时候,该事件的发生唤醒了多个进程,但只有一个进程获得“控制权”,造成大量因为无效唤醒产生的性能浪费。

Linux惊群效应详解(最详细的了吧)_羊群效应 惊群效应 ectd_sinat_35297665的博客-CSDN博客

  1. c10k问题

服务器如何支持10k个并发连接?最初的服务器都是基于进程/线程模型的,新到来一个TCP连接,就需要分配1个进程(或者线程)。进程又是操作系统最昂贵的资源,一台机器无法创建很多进程。如果是C10K,就要创建1万个进程,那么就单机而言,操作系统是无法承受的(往往出现效率低下、甚至完全瘫痪)。如果是采用分布式系统,维持1亿用户在线需要10万台服务器,成本巨大

C10K问题,本质上是操作系统的问题。对于Web1.0/2.0时代的操作系统而言, 传统的同步阻塞I/O模型都是一样的,处理的方式都是requests per second,并发10K和100的区别关键在于CPU。

创建的进程、线程多了,数据拷贝频繁(缓存I/O、内核将数据拷贝到用户进程空间、阻塞), 进程/线程上下文切换消耗大, 导致操作系统崩溃,这就是C10K问题的本质!

主流网络模型的介绍(涉及设计模式)

有哪些模型?
  • thread-based架构模型

  • Single-Reactor单线程模型

  • Single-Reactor多线程模型

  • Muti-Reactor多线程模型

  • Muti-Reactor多进程模型

Thread-based架构模型

每多一个client连接,就创建一个线程

每个线程独自完成读取、解码、处理、编程、发送回去,5个步骤

场景:

并发量不大的情况

缺点:

  • 线程创建、销毁开销大

  • 创建线程需要一定资源

  • 线程切换需要资源

  • 一个进程可以开启的线程数量有限

单Reactor单线程模型

单Reactor指的是什么?

一个Reactor就是一个epoll对象

步骤:

  • 所有的client建立连接,处理业务逻辑都在一个线程里。

  • 一个数据的处理时间会影响未处理数据的时间

缺点:

业务逻辑处理十分耗时,会大大降低IO处理效率,甚至会影响新的client的连接

单Reactor线程池模型

改进点:

  • 把IO和业务逻辑处理进行剥离

  • 单Reactor只用负责新client的连接,读和发送

  • 引入线程池来处理业务逻辑。

不足:

当面临百万连接、高并发和大数据时,单Reactor处理不过来。

多Reactor多线程模型(和多线程模型)

改进:(主从结构)

  • (把新client的添加和 对client发来的读、写操作分离

  • mainReactor将负责新client的添加,引入子Reactor进行读、写操作

多进程VS多线程

资源分配:

主从之间涉及资源竞争时,多线程需要锁保证同步,多进程则需要进程间通信。

资源利用:

单进程多线程,资源利用率稍低

多个进程,资源利用更充分

编程难度:

单进程多线程比较容易,都在一个进程

多进程需要对进程间通信进行控制

各开源组件模型的选择

网络框架源码剖析

陈硕网络编程

简单的、非并发

  1. TTCP:tcp性能测试工具

  2. Round-trip:测试2台机器的时间差,,udp

  3. x5J8tXj._6z2RdB

  4. Netcat:网络编程的瑞士军刀

  5. SLOW sink/sourse:慢速的收发的工具(从应用层模拟)

并发网络编程

  1. SOCKS proxy server(中继2个tcp)

  2. Sudoku solver

  3. Simple memcached

  4. Broadcasting to multiple TCP peers


评论