• 多进程(multi_processes),多线程(multi_threaded),并发与并行


    多进程
    就是多任务同时运行,比如人可以三心二意一样,他的实现机制就是并发。但是计算机cpu实际上在一个时间点只能执行一个任务,因此并发可以理解为时间轮转调度运行方式,即按次序不断切换执行多个任务,但是每次切换都很快,感觉不到任务的暂停。实际上还是一心一意。每个进程至少含有一个线程。

    多线程:线程是进程的细分,多线程是指一个进程(任务)又可以分成他不用的部分来执行。

    cpu又分为单核心和多核心。每个核心只能执行一个线程。

    并行:多进程(多任务)同时运行,真正的同时多任务。只有多核cpu线程可以并行,多cpu进程可以并行。
    并发:单CPU单核中线程只能并发,进程也只能并发

    无论是并发还是并行,使用者看到的都是多进程,多线程。

    首先,将系统的线程和cpu的线程分开,我们说cpu是4核8线程(这里指cpu最多可以同时运行8条指令集bytecode)
    因此,多进程(每个进程只有一个线程)就是大家(线程)不在一个桌子上干活(每个桌子都有一份完整的材料--内存占用大);  多线程就是在一个桌子干活,材料都是共享的

    线程是操作系统直接支持的最小执行单元.
    任何进程默认就会启动一个线程,我们把该线程称为主线程,主线程又可以启动新的线程(子线程),Python的threading模块有个current_thread()函数,它永远返回当前线程的实例。
    python每个进程有一个全局锁,因此不管这个进程下是几个线程,都只能同时存在一个在执行的线程.
    当然,多进程是可以真正实现多线程,因为此时由多个解释器,每个解释器一个GIL.

    master-workers机制:master就是多线程的主线程,主要是分配任务,而workers为其他子线程.
    IO任务:从硬盘或者网口等读写任务(除cpu和主存外的那些更慢的读写任务)

    因此对于IO任务来说:python的多线程还凑乎.(python本身就是---真正运行起来时为单核单线程,核心再多也白瞎)
    对所有面向I/O的(会调用内建的操作系统C代码的)程序来说,GIL会在这个I/O调用之前被释放,以允许其他线程在这个线程等待I/O的时候运行。
    如果某线程并未使用很多I/O操作,它会在自己的时间片内一直占用处理器和GIL。也就是说,I/O密集型的Python程序比计算密集型的Python程序更能充分利用多线程的好处。

    python的多线程的queue是线程安全的!----即比如.put操作,如果消息队列中暂时是满的,则.put会暂时被阻塞.

    Python多进程和多线程哪个快?

    • 对CPU密集型代码(比如循环计算) - 多进程效率更高
    • 对IO密集型代码(比如文件操作,网络爬虫) - 多线程效率更高。

    为什么是这样呢?其实也不难理解。
    对于IO密集型操作,大部分消耗时间其实是等待时间,在等待时间中CPU是不需要工作的,
    那你在此期间提供双CPU资源也是利用不上的,相反对于CPU密集型代码,2个CPU干活肯定比一个CPU快很多。
    那么为什么多线程会对IO密集型代码有用呢?这时因为python碰到IO等待会释放GIL供新的线程使用,实现了线程间的切换。

    但是python3中对于IO有了更好的协程来解决.

    https://www.cnblogs.com/zhangchaocoming/p/12583639.html

    https://blog.csdn.net/zhengyshan/article/details/80641770

    https://cloud.tencent.com/developer/article/1193691

    https://www.cnblogs.com/klb561/p/10759477.html

  • 相关阅读:
    R语言代写模型中的加总偏误与内生性:一种数值模拟方法
    R语言代写NYPD纽约市警察局抢劫者数据分析
    R语言代写使用马尔可夫链Markov Chain, MC来模拟抵押违约
    BZOJ 2600: [Ioi2011]ricehub 双指针+贪心
    BZOJ 4903: [Ctsc2017]吉夫特 数论+dp
    BZOJ 4500: 矩阵 带权并查集
    草稿
    BZOJ 5082: 弗拉格 矩阵乘法
    BZOJ 4764: 弹飞大爷 LCT
    BZOJ 3309: DZY Loves Math 莫比乌斯反演+打表
  • 原文地址:https://www.cnblogs.com/Henry-ZHAO/p/12725260.html
Copyright © 2020-2023  润新知