并发总结

并发总结:

   并发的定义,能不能同时服务多个客户端

   其实,以后做并发可以从三个思路出发,三种技术

 

一    进程并行,只能开到CPU个数进程,但是它能用来处理计算型(cpu密集型)的任务    # 开销大

 

二    如果并行不是必须的,那么是否可以考虑用并发来代替?(IO密集型)    # 线程,单位开销比进程小很多

  因为线程中的并发是轮询调度,遇到阻塞就切换

  只要是网络,一定有延迟,有延迟一定有阻塞

    由于全局解释器锁的存在,在进行多线程操作的时候,不能调用多个CPU内核,只能利用一个内核,

  所以在进行CPU密集型操作的时候,不推荐使用多线程,更加倾向于多进程。那么多线程适合什么样的应用场景呢?

  对于IO密集型操作,多线程可以明显的提高效率,例如Python爬虫的开发,

  绝大多数时间爬虫是在等待socket返回数据,网络IO的操作延时比CPU大得多。

 

三   如果轮询调度也不是必要的,那么是否可以考虑只要阻塞来切换

  使用IO多路复用 + 协程来实现阻塞切换(并发量最高)

  函数变成协程,函数本身就几行代码,所以消耗少

  协程需要用户自己来编写调度逻辑,对于CPU的切换来说,协程是单进程,所以CPU不用

去考虑怎么调度、切换上下文,这就省去了CPU的切换开销,所以协程在一定程度上又好于多线程。

 

没有十全十美的技术,我们要按照我们的实际需求看具体用什么技术

posted @ 2018-08-22 13:11  pywjh  阅读(120)  评论(0编辑  收藏  举报
回到顶部