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等操作可以立即完成,不会阻塞

        

          

  • 相关阅读:
    透视表提取不反复记录(1)-出现值
    ORA-38760: This database instance failed to turn on flashback database
    Android蓝牙串口程序开发
    指尖上的电商---(5)schema.xml配置具体解释
    iOS-UIImage imageWithContentsOfFile 和 imageName 对照
    JSON-RPC轻量级远程调用协议介绍及使用
    POJ 2296 Map Labeler(2-sat)
    接口測试-HAR
    [Leetcode]Combination Sum II
    MarkDown、Vim双剑合璧
  • 原文地址:https://www.cnblogs.com/LinChengcheng/p/10518135.html
Copyright © 2011-2022 走看看