并发编程6
Posted linchengcheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发编程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等操作可以立即完成,不会阻塞
以上是关于并发编程6的主要内容,如果未能解决你的问题,请参考以下文章