码迷,mamicode.com
首页 > 其他好文 > 详细

并发编程6

时间:2019-03-12 18:42:21      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:效率   默认   客户   cpu   多路复用   完成   一个   解决   一点   

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

    

      

并发编程6

标签:效率   默认   客户   cpu   多路复用   完成   一个   解决   一点   

原文地址:https://www.cnblogs.com/LinChengcheng/p/10518135.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!