zoukankan      html  css  js  c++  java
  • 并发编程6

    IO模型

      模型就是套路,是解决某个固定问题的方式方法

      io模型是解决io问题的方式

      io指的是输入输出,输入输设备的速度对比cpu而言是非常慢的,比如recv,input等都属于io操作

      io操作最大的问题就是会阻塞程序的执行

      io模型要解决的也仅仅是网络io操作

      io模型有以下几个:

      1 阻塞io

        socket模块默认就是阻塞的

        产生的问题:同一时间只能服务一个客户端

        方法一:多线程

          优点:如果并发量不高,小路是较高的

          因为每个客户端都由单独线程来处理

          弊端:不能无限的开启线程,线程也需要占用资源

        方法二:多进程

          优点:可以多个cpu并行处理

          弊端:占用资源非常大,一旦客户端稍微多一点执行效率立刻变慢

        线程池,进程池:

          优点:保证了服务器正常稳定的运行,还帮你负责创建和销毁线程以及任务分配

          弊端:一旦并发量超过最大线程数量,就只能等前面的运行完毕

        协程:基于单线程并发

          优点:不需要创建一堆线程,也不需要在线程将做切换,没有数量限制

          弊端:不能利用多核优势

      2 非阻塞io

        非阻塞io 即遇到io操作也不导致程序阻塞,会继续执行意味着即使遇到io操作cpu执行权也不会被剥夺程序效率就变高了

      3 io多路复用

        多路复用也是要用单线程来处理客户端并发,与其他模型相比多出了select这个角色

        程序不再直接问系统要数据,而是发起一个select调用,select会阻塞直到其中某个socket准备就绪,此时应用程序再发起系统调用来获取数据,由于select已经帮我们确认了某个socket一定是就绪了,所以后续的recv,send等操作可以立即完成,不会阻塞

        

          

  • 相关阅读:
    getopt函数
    Pac的OI回忆录
    Python embed包使用
    Git add . Git add * 的区别
    Linux Python升级版本至2.7.5
    Linux6.3升级zlib
    一: Centos 虚拟机安装
    4.4 SpringCloud__服务注册与发现Eureka__自我保护机制
    4.3 SpringCloud__服务注册与发现Eureka__高可用集群配置
    4.2 SpringCloud__服务注册与发现Eureka__搭建注册中心
  • 原文地址:https://www.cnblogs.com/LinChengcheng/p/10518135.html
Copyright © 2011-2022 走看看